Docker 是一个用于开发,发布和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker 平台
Docker 提供了在松散隔离的环境(称为容器)中打包和运行应用程序的功能。隔离和安全性可以让我们在给定主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负担,而是直接在主机的内核中运行。这意味着与使用虚拟机相比,在给定的硬件组合上可以运行更多的容器。我们甚至可以在实际上是虚拟机的主机中运行Docker容器!
Docker提供了工具和平台来管理容器的生命周期:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,可以将应用程序作为容器或协调服务部署到生产环境中。无论我们生产环境是本地数据中心,云提供商还是两者的混合,其工作原理都相同。
使用 Docker 带来的好处
快速的,可持续化的交付你的应用程序。
Docker 通过允许开发人员使用提供您的应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。
参考以下使用场景:
- 作为开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 使用 Docker 将应用程序推送到测试环境,并执行自动和手动测试。
- 当开发发现 bugs,他们可以在开发环境快速修复并且推送到测试环境进行测试和验证。
- 当测试完成后,将修改程序推送到生产环境。
响应式部署和扩展
Docker 基于容器的高度可移植的特性,容器可以在开发人员的笔记本电脑,数据中心的物理机或虚拟机,云提供商或混合环境中运行。
Docker 的可移植性和轻量级的特性可以使我们轻松地管理工作负载,并根据业务需求指示实时扩展或删除应用程序和服务。
在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行且经济高效的替代方案,因此可以利用更多的计算能力来实现业务目标。Docker 非常适合高密度环境以及中小型部署,在这些部署中可以用更少的资源做更多的事情。
Docker 架构
Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护程序进行对话,守护进程实现了构建,运行和分发 Docker 容器的繁重工作。Docker 客户端和守护进程在 Unix 套接字或网络接口上使用 REST API 进行通信。
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 已配置为在 Docker Hub 上查找映像。您甚至可以运行自己的私人注册表。
使用 docker pull 或 docker run 命令时,所需的图像将从配置的注册表中提取。使用该 docker push 命令时,会将映像推送到配置的注册表。
Docker 对象
使用Docker时,可以创建和使用镜像,容器,网络,卷,插件和其他对象。
Images
通常一个镜像基于另一个镜像,并进行自定义。你也可以创建自己的镜像,也可以使用其他人创建并在仓库中发布的镜像。要构建自己的镜像,可以使用简单的语法创建一个 Dockerfile,以自定义创建镜像并运行它所需要的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。当更改 Dockerfile 并重建镜像时,仅更改那些已更改的层。与其它虚拟化技术相比,这是镜像轻巧,小型和快速的部分原因。
Containers
容器是图像的可运行实例。可以使用 Docker API 或 CLI 创建,启动,停止,移动或删除容器。可以将容器连接到一个或多个网络,甚至可以基于当前状态去创建一个新的镜像。
默认情况下,容器与容器及其主机之间的隔离度相对较高。我们可以控制容器的网络,存储或其它基础子系统与其它容器或主机的隔离程度。
容器由其镜像以及在创建或启动时为其提供的任何配置选项定义。删除容器后,未存储在永久性存储中的状态更改为消失。
container 编排
利用 docker-compose 可以实现 docker 容器的集群启动。需要编写 compose yaml 文件。