Docker教程(一) Docker入门教程
1 Docker入门教程
1.1 集装箱是什么
在了解Docker之前,我们先了解一下集装箱这个概念。
集装箱,英文名container.集装箱的出现,大大降低了货物运输的成本,实现了货物运输的标准化,以此为基础逐步建立全球范围内的船舶、港口、航线、公路、中转站、桥梁、隧道、多式联运相配套的物流系统,世界经济形态因此而改变。集装箱最大的成功在于其产品的标准化以及由此建立的一整套运输体系。
1.2 Docker是什么
Docker,直译是码头工人。这个码头工人搬运的是集装箱(Container)。
Docker通过Linux Container技术将任意类型的应用进行包装,变成一种标准化的,可移植的,自管理的组件。因为这种对应用的包装不仅包装了应用程序本身,更将应用的依赖和环境一并进行打包,所以她允许我们可以将这个包拿到任意环境去运行,提高效率的同时,不再有兼容性的问题。
如同集装箱代表了以集装箱为核心的现代航运体系一样,docker代表了以容器技术为核心的一套标准化体系。
Docker是以容器技术为核心的包含构建、运行与交付的整套IT体系。
1.3 Docker项目的目标
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux容器(LXC)等技术。在 LXC 的基础上 Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker的容器就像操作一个快速轻量级的虚拟机一样简单。
1.4 Docker对比传统虚拟机优势
对比传统虚拟机表
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
1.5 Docker基本概念
1、Docker客户端/守护进程:
Docker的客户端向服务器发送请求,Docker处理完请求返回结果。
2、Docker Image镜像:
- Docker镜像是一个叠的只读文件系统,最底端是bootfs引导文件系统。Docker容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载。
- rootfs(Ubuntu):Root文件系统,Root文件系统可以是一种或者多种的操作系统,Root文件系统只能是只读状态。
- 联合加载:联合加载是指一次加载多个文件系统,会将各层的文件加载叠加到一起,最终的文件系统,会包含所有文件系统及目录,Docker将这样的文件系统称为镜像。一个镜像可以放到另一个镜像的底部,下面的镜像称为父镜像,依次类推直到镜像的最底部,最底部的镜像称为基础镜像。
-
3、Docker Container容器:
- Docker利用容器来运行应用,容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
- Docker在运行中会在最顶层创建一个可写层,我们运行的程序会可写层进行。一开始启动容器时,可写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上。如:当修改一个文件时,这个文件会从该层下面的只读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层的该文件幅本所隐藏,即:写时复制。
- 每个只读镜像层都是只读的,并且以后永远不会变化,当创建一个新容器时,Docker会创建一个镜像栈(见下图),在栈的最顶层添加可写层,读写层加上下面的镜像层及配置数据,就组成了容器。
4、Docker Registry仓库:使用仓库保存所需要的镜像,仓库分两种:公有和私有。
- 公有:最大的公开仓库是 DockerHub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 DockerPool等,可以提供大陆用户更稳定快速的访问。
- 私有:用户架设私有仓库:当用户创建了自己的镜像之后就可以使用 push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull下来就可以了。
- *注:Docker仓库的概念跟 Git类似,注册服务器可以理解为 GitHub这样的托管服务。
-
1.6 Docker依赖Linux内核特性
1、Namespaces命名空间:命名空间提供了系统资源的隔离,如:进程、网络、文件系统…。实际Linux实现命名空间主要目的之一,就是为了实现轻量级虚拟化服务(容器)。在同一个命名空间下的进程可以感知彼此的变化,而对其它命令空间下的进程一无所知。
- PID(ProcessID):进程隔离。
- NET(Network):管理网络接口。
- IPC(InterProcessCommunication)管理跨进程通信的访问。
- MNT(Mount):管理挂载点。
- UTS(UnixTimesharing System)隔离内核和版本标识。
2、Controlgroups(cgroups)控制组:是一种可以限制、记录、隔离使用线程资源的机制,最初是由google工程师提出,并且在2007年更新Linux kernel 2.6.24版本。
- 资原限制:如外面的子系统可以为进程组,设置一个内存使用的上限,一旦使用的内存超过了上限,再申内存就会发生OutMemoryError。
- 优先级设定:可以设定哪些进程可以使用更大的CPU、磁盘IO的资源。
- 资源计量:可以计算哪些进程组使用了多少系统资源。
- 资源控制:可以将进组进行挂起和恢复。
3、Docker容器的能力:
- 文件系统隔离:每个容器都有自己的root文件系统。
- 进程隔离:每个容器都运行在自己的进程环境中。
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开。
- 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器。
1.7 学习Docker推荐书籍:
1. 《Docker从入门到精通》
2. 《Docker进阶与实战》
3. 《Docker容器与容器云》
4. 《Docker源码分析》
5. 《Docker开发实践》
6. 《Docker生产环境实践指南》
--以上为《Docker教程(一) Docker入门教程》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。
——厚积薄发(yuanxw)