Docker 概述
Docker 是一个用于开发、交付和运行应用程序的开放平台。
Docker 使您能够将应用程序与基础架构分离,以便快速交付软件。
借助 Docker,您可以像管理应用程序一样管理基础架构。
通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显著减少编写代码和在生产中运行代码之间的延迟。
您可以在多个平台上下载并安装 Docker。该教程主要针对 Linux 的 Debian 发行版
您应该了解容器和图像。
什么是容器?
简而言之,容器是计算机上的沙盒进程,与主机上的所有其他进程隔离。
这种隔离利用了内核命名空间(namespace)和 cgroups,这些功能已经在 Linux 中存在了很长时间。
而 Docker 一直致力于使这些功能变得平易近人且易于使用。总而言之,容器:
- 是图像的可运行实例。您可以使用 DockerAPI 或 CLI 创建、启动、停止、移动或删除容器。
- 可以在本地计算机、虚拟机上运行或部署到云中。
- 是可移植的(可以在任何操作系统上运行)。
- 与其他容器隔离,并运行自己的软件、二进制文件和配置。
什么是容器映像?
运行容器时,它使用隔离的文件系统。
此自定义文件系统由容器映像提供。
由于映像包含容器的文件系统,因此它必须包含运行应用程序所需的一切(所有依赖项、配置、脚本、二进制文件等)。
容器映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。
说明
如果您熟悉 chroot ,请将容器视为 chroot 的扩展版本。
文件系统只是来自映像。
但是,容器增加了仅使用 chroot 时不可用的额外隔离。
注释
cgroups
cgroups,其名称源自控制组群(control groups)的简写,是 Linux 内核的一个功能,用来限制、控制与分离一个进程组的资源(如 CPU、内存、磁盘输入输出等)。
这个项目最早是由 Google 的工程师(主要是 Paul Menage 和 Rohit Seth)在 2006 年发起,最早的名称为进程容器(process containers)。
在 2007 年时,因为在 Linux 内核中,容器(container)这个名词有许多不同的意义,为避免混乱,被重命名为 cgroup,并且被合并到 2.6.24 版的内核中去。此后,又添加了很多功能。
cgroups 的一个设计目标是为不同的应用情况提供统一的接口,从控制单一进程(像 nice)到操作系统层虚拟化(像 OpenVZ,Linux-VServer,LXC)。
cgroups 提供:
- 资源限制:组可以被设置不超过设定的内存限制;这也包括虚拟内存。
- 优先级:一些组可能会得到大量的 CPU 或磁盘 IO 吞吐量。
- 结算:用来衡量系统确实把多少资源用到适合的目的上。
- 控制:冻结组或检查点和重启动。