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)增量修改
可以在不改变基础镜像的同时修改其目录的文件,所有的更高都发生在最上层的写操作层,增加了基础镜像的可共享内容。