Docker概述(引擎) | Docker overview (Engine)
Docker概述
Docker 是开发,运输和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分离开来,从而可以快速交付软件。借助 Docker,您可以像管理应用程序一样管理基础架构。通过利用 Docker 的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟。
Docker平台
Docker 提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负载,而是直接在主机的内核中运行。这意味着,与使用虚拟机相比,您可以在给定的硬件组合上运行更多的容器。你甚至可以在实际上是虚拟机的主机中运行 Docker 容器!
Docker 提供工具和平台来管理容器的生命周期:
- 使用容器开发您的应用程序及其支持组件。
- 容器成为分发和测试你的应用程序的单元。
- 准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。
Docker引擎
Docker Engine
是一个包含以下主要组件的客户端 - 服务器应用程序:
- 一种称为守护进程(
dockerd
命令)的长期运行程序。
- REST API指定程序可用于与守护进程进行通信并指示其执行操作的接口。
- 命令行界面 (CLI)客户端(
docker
命令)。
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事分享他们的工作。
- 他们使用 Docker 将他们的应用程序推入测试环境并执行自动和手动测试。
- 当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境进行测试和验证。
- 测试完成后,向客户提供修补程序与将更新后的图像推送到生产环境一样简单。
响应式部署和缩放
Docke r的基于容器的平台支持高度可移植的工作负载。Docker 容器可以在开发人员的本地笔记本电脑上,数据中心的物理或虚拟机上,云提供程序上或混合环境中运行。
Docker 的可移植性和轻量级特性也使得动态管理工作负载变得非常容易,可以近乎实时地按业务需求扩展或拆分应用程序和服务。
在同一个硬件上运行更多的工作负载
Docker 轻量且快速。它为基于虚拟机管理程序的虚拟机提供了一种可行,经济高效的替代方案,因此您可以使用更多计算容量来实现业务目标。Docker 非常适合高密度环境和中小型部署,您需要以更少的资源实现更多功能。
Docker体系结构
Docker 使用客户端
- 服务器体系结构。Docker 客户端
与Docker 守护进程通信
,Docker 守护进程
负责构建,运行和分发Docker容器。Docker 客户端
和守护进程
可以
在同一个系统上运行,也可以
将 Docker 客户端
连接到远程 Docker 守护进程
。Docker客户端
和守护进程
使用 REST API 通过 UNIX 套接字或网络接口进行通信。
Docker守护进程
Docker守护进程(dockerd
)监听Docker API请求并管理Docker对象,如图像,容器,网络和卷。守护进程还可以与其他守护进程通信来管理Docker服务。
Docker客户端
Docker 客户端(docker
)是许多 Docker 用户与 Docker 交互的主要方式。当你使用诸如这样的命令时docker run
,客户端发送这些命令给dockerd
其执行。该docker
命令使用Docker API。Docker 客户端可以与多个守护进程进行通信。
Docker注册表
Docker 注册表
存储Docker镜像。Docker Hub 和 Docker Cloud 是任何人都可以使用的公共注册表
,并且Docker默认配置为在 Docker Hub 上查找图像。你甚至可以运行你自己的私人注册表
。如果您使用 Docker Datacenter(DDC),它包括Docker Trusted Registry(DTR)。
当您使用docker pull
或docker run
命令时,所需的图像将从您配置的注册表中提取。当您使用该docker push
命令时,您的图像被推送到您配置的注册表中。
Docker商店允许您购买和销售 Docker 图像或免费发布。例如,您可以购买包含来自软件供应商的应用程序或服务的 Docker 映像,并使用该映像将应用程序部署到您的测试,临时和生产环境中。您可以通过拉取新版本的图像并重新部署容器来升级应用程序。
Docker对象
当您使用 Docker 时,您正在创建和使用图像,容器,网络,卷,插件和其他对象。本节简要介绍其中一些对象。
图片
一个图像
是一个只读用于创建一个泊坞容器的指令模板。通常,图像
基于
另一张图像
,并具有一些额外的自定义功能。例如,您可以构建基于
该ubuntu
映像的映像,但会安装 Apache Web 服务器和应用程序,以及使应用程序运行所需的配置详细信息。
您可能会创建自己的图像,或者您可能只能使用其他人创建并在注册表中发布的图像。为了构建您自己的图像,您可以使用简单的语法创建一个Dockerfile
,以定义创建图像并运行它所需的步骤。Dockerfile
中的每条指令都会在图像中创建一个图层。当您更改Dockerfile
并重建映像时,只重建那些已更改的图层。与其他虚拟化技术相比,这是使图像轻量,小巧,快速的一部分。
集装箱
容器是图像的可运行实例。您可以使用 Docker API或CLI创建,运行,停止,移动或删除容器。您可以将容器连接到一个或多个网络,将存储器连接到它,甚至可以根据其当前状态创建新映像。
默认情况下,容器与其他容器及其主机相对隔离。您可以控制容器的网络,存储或其他底层子系统与其他容器或主机的隔离程度。
容器由其图像定义,以及您在创建或运行时为其提供的任何配置选项。当容器停止时,未存储在永久存储中的状态更改将消失。
示例docker run命令
以下命令运行一个ubuntu
容器,以交互方式附加到本地命令行会话并运行/bin/bash
。
$ docker run -i -t ubuntu /bin/bash
当您运行此命令时,会发生以下情况(假定您正在使用默认的注册表配置):
- 如果您
ubuntu
本地没有镜像,Docker 会从您配置的注册表中提取它,就像您docker pull ubuntu
手动运行一样。
- Docker 创建一个新的容器,就好像您
docker create
手动运行了一个命令一样。
- Docker 将一个读写文件系统分配给容器,作为其最后一层。这允许正在运行的容器在其本地文件系统中创建或修改文件和目录。
- 由于您没有指定任何网络选项,因此 Docker 会创建一个网络接口来将容器连接到默认网络。这包括分配一个IP地址给容器。默认情况下,容器可以使用主机的网络连接连接到外部网络。
- Docker 启动容器并执行
/bin/bash
。由于容器是交互式运行并且连接到您的终端(由于-i
和-t
)标志,因此您可以使用键盘提供输入并将输出记录到您的终端。
- 当您键入
exit
以终止/bin/bash
命令时,容器停止但不会被删除。您可以重新启动或删除它。
服务
通过服务,您可以跨多个 Docker 守护进程扩展容器,这些守护进程可以作为一个群组
与多个管理人员
和工作人员
一起工作
。swarm中的每个成员都是 Docker 守护进程,守护进程都使用 Docker API 进行通信。服务允许您定义所需的状态,例如在任何给定时间必须可用的服务的副本数量。默认情况下,该服务在所有工作
节点之间进行负载平衡。对于消费者来说,Docker 服务似乎是一个单一的应用程序。Docker 引擎在Docker 1.12及更高版本中支持 swarm 模式。
基础技术
Docker 使用Go编写,利用 Linux 内核的几个特性来提供其功能。
命名空间
Docker 使用一种叫做namespaces
提供称为容器
的独立工作空间的技术。当你运行一个容器
时,Docker 会为该容器
创建一组命名空间
。
这些名称空间提供了一个隔离层。容器的每个方面都在单独的名称空间中运行,并且其访问权限限于该名称空间。
Docker 引擎在 Linux 上使用如下的命名空间:
该
pid
命名空间:
进程隔离(PID:进程ID)。
该
net命名空间:
管理网络接口(NET:网络)。
该ipc
命名空间:
管理访问IPC资源(IPC:进程间通信)。
该
mnt命名空间:
管理文件系统挂载点(MNT:摩)。
该
uts命名空间:
隔离内核和版本标识符。(UTS:Unix分时系统)。
控制组
Linux 上的 Docker Engine 也依赖于另一种称为控制组
(cgroups
)的技术。cgroup 将应用程序限制为一组特定的资源。控制组
允许 Docker 引擎将可用硬件资源共享给容器,并可选地强制实施限制和约束。例如,您可以限制可用于特定容器的内存。
联盟文件系统
联合文件系统或 UnionFS 是通过创建图层进行操作的文件系统,使它们非常轻巧和快速。Docker 引擎使用 UnionFS 为容器提供构建块。Docker Engine 可以使用多种 UnionFS 变体,包括AUFS,btrfs,vfs和DeviceMapper。
容器格式
Docker 引擎将名称空间,控制组和 UnionFS 组合成一个名为容器格式的包装器。默认的容器格式是libcontainer
。将来,Docker 可以通过与诸如 BSD Jails 或 Solaris Zones等技术集成来支持其他容器格式。
下一步
- 阅读关于安装 Docker 的信息。
- 获取 Docker 入门教程的实践经验。
- 查看 Docker Engine 用户指南中的示例和深入探讨主题。