Docker认识基础
一、Docker介绍
Docker是一个C/S架构的容器引擎,它包括镜像、容器和库这三个重要的概念。
Docker是一个开源平台,它包含容器引擎和Docker Hub注册服务器。
1)Docker容器引擎
此引擎可以让开发者打包自己的应用和依赖包到一个可移植的容器中,然后将其发布到任何流行的Linux机器上。
2)Docker Hub注册服务器
用户可以在该服务器上创建自己的镜像库来存储、管理和分享镜像。利用Docker,可以实现软件的一次配置、到处运行。
Docker是PaaS提供商dotCloud公司(后改名为Docker)开源的、基于LXC的高级容器引擎,源码托管于GitHub,基于GoLang开发,以Apache 2.0许可证发布。
Docker的特性:
1)统一的打包格式
Docker定义了一种统一标准的打包格式,可将应用及其依赖打包到单个的镜像。
2)交互式Shell
Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
3)版本控制
Docker的版本控制类似于Git,Docker可以跟踪一个容器的版本信息,查看版本差异,提交或回滚版本等。
4)组件复用
Docker容器以组件的方式搭建,可以利用一个基础镜像构建更多的应用容器。
5)共享镜像
Docker用于一个公共的注册服务器,无数的开发者上传了他们的镜像,这些镜像包罗万象,基本上各种应用领域、应用场景都可以找到相应的镜像。
6)内容的隔离
文件系统隔离:每个进程容器运行在完全独立的根文件系统里;
资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源;
网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
7)日志记录
Docker将会收集和记录每个进程容器的标准流,用于实时检索或批量检索。
8)写时复制
Docker采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间.
二、容器vs.虚拟机
Docker是容器的一种,容器是一种轻量级的虚拟技术,重量级的虚拟技术就是虚拟机。
虚拟机是一种基于硬件的虚拟技术,它采用指令集的虚拟,完全虚拟一整套物理主机,包含CPU、内存、磁盘、网卡等硬件设备,呈现给用户的是一个物理机的特性。
用户可以在一台主机上安装多个虚拟机,每一个虚拟机实例都包含了完整的硬件虚拟层、OS、公共库等。
容器是一种基于操作系统的虚拟技术,它运行于操作系统之上的用户空间,所有的容器都共用一个系统内核,甚至是公共库。容器引擎提供了进程级的隔离,让每个容器都像是运行在单独的系统之上,但又能共享很多底层的资源。
与虚拟机相比,容器更为轻量级、更快速、更易于管理、资源占用更小。
除了Docker,场景的容器还有Solaris Zones、BSD jails、OpenVZ和LXC等。
三、Docker的应用场景
下面列举一些Docker典型的应用场景。
1)加速本地开发
2)自动打包和部署应用
3)创建轻量级、私有的PaaS环境
4)自动化测试和持续集成/部署
5)部署并扩展Web应用、数据库和后端服务器
6)创建安全沙盒
7)轻量级的桌面虚拟化
四、Docker的组件
Docker采用C/S架构开发,整体架构如图所示:
包括:
1)Docker客户端
即Docker的可执行程序,它可以通过命令行和API的形式与Docker的守护进程进行通信。
2)Docker守护进程
Docker守护进程提供Docker服务。
五、Docker三大核心组件
Docker有三大核心组件:镜像、容器和库
1)镜像
镜像是一个只读的静态模板,保存了容器需要的环境和应用的执行代码。镜像采用分层机制,每个镜像都是只读的,但可以将写数据的层通过联合文件系统附加到原有的镜像上。这样镜像就很易于存储、传输和更新。
2)容器
容器是一个运行时环境,是镜像的运行状态,是镜像执行的动态表现。容器提供了应用的统一的运行方式:创建、开始、停止、重启、销毁。
3)库
Docker采用注册服务器来存储和共享用户的镜像,库是某个特定用户存储镜像的目录。通常一个用户可以建立多个库来保存自己的镜像。库是注册服务器的一部分,注册服务器分公有的和私有的,公有的如Docker官方提供的Docker Hub。
六、Docker的度量
Docker是利用容器来实现的一种轻量级的虚拟技术,从而在保证隔离性的同时达到节省资源的目的。Docker的可移植性可以让它一次建立,到处运行。Docker的度量可以从以下四个方面进行:
1)隔离性
Docker采用libcontainer作为默认容器,代替了以前的LXC。libcontainer的隔离性主要是通过内核的命名空间来实现的,有pid、net、ipc、mnt、uts命令空间,将容器的进程、网络、消息、文件系统和主机名进行隔离。
2)可度量性
Docker主要通过cgroups控制组来控制资源的度量和分配。
3)移植性
Docker利用AUFS来实现对容器的快速更新。
AUFS是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统,支持对每个目录的读写权限管理。AUFS具有层的概念,每一次修改都是在已有的只写层进行增量修改,修改的内容将形成新的文件层,不影响原有的层。
4)安全性
安全性可以分为容器内部之间的安全性;容器与托管主机之间的安全性。
容器内部之间的安全性主要是通过命名空间和cgroups来保证的。
容器与托管主机之间的安全性主要是通过内核能力机制的控制,可以防止Docker非法入侵托管主机。
Docker容器使用AUFS作为文件系统,有如下优势:
1)节省存储空间
多个容器可以共享同一个基础镜像存储。
2)快速部署
如果部署多个来自同一个基础镜像的容器时,可以避免多次复制操作。
3)升级方便
升级一个基础镜像即可影响到所有基于它的容器。
4)增量修改
可以在不改变基础镜像的同时修改其目录的文件,所有的更高都发生在最上层的写操作层,增加了基础镜像的可共享内容。