1. 什么是 Docker?
Docker 是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动化应用程序的部署、扩展和管理。容器是独立的可执行单元,封装了应用程序在各种环境中一致运行所需的所有必要依赖项、库和配置文件。
◇什么是容器?
容器是轻量级、可移植且隔离的软件环境,允许开发人员在不同平台上一致地运行和打包应用程序及其依赖项。它们有助于简化应用程序的开发、部署和管理过程,同时确保应用程序无论底层基础设施如何,都能一致运行。
- 课程 容器简介 - AWS Skill Builder
- 官方 什么是容器?
- 动态 探索有关容器的热门帖子
◇容器的必要性
容器解决了在大型团队中工作时环境不一致的问题。在容器或虚拟环境出现之前,由于必须安装和配置本地环境来构建同事或朋友共享的项目,导致了许多问题和时间损失。
- 文章 容器的必要性
◇裸金属 vs 虚拟机 vs 容器
裸金属是一个术语,用于描述直接在硬件上运行而不进行任何虚拟化的计算机。这是运行应用程序的最高效方式,但也是最不灵活的方式。每台服务器只能运行一个应用程序,并且无法轻松将应用程序迁移到另一台服务器。虚拟机(VM)是一种在单台服务器上运行多个应用程序的方式。每个虚拟机运行在虚拟机管理程序之上,虚拟机管理程序是一种模拟计算机硬件的软件。虚拟机管理程序允许您在一台服务器上运行多个操作系统,并且还提供了在不同虚拟机上运行的应用程序之间的隔离。容器是一种在没有虚拟机管理程序开销的情况下在单台服务器上运行多个应用程序的方式。每个容器运行在容器引擎(管理容器生命周期的软件)之上,容器引擎使用主机操作系统的内核功能来监督和隔离进程。
◇Docker 和 OCI
开放容器倡议(OCI)是 Linux 基金会的一个项目,旨在为容器格式和运行时创建行业标准。其主要目标是通过定义的技术规范确保容器环境的兼容性和互操作性。
- 官方 开放容器倡议
- 文章 OCI - 维基百科
2. 底层技术
了解支撑 Docker 的核心技术将帮助您更深入地理解 Docker 的工作原理,并使您能够更有效地使用该平台。
-
Linux 容器 (LXC)
Linux 容器 (LXC) 允许在一台计算机上运行多个独立的 Linux 系统。LXC 容器作为隔离的空间,共享主机的资源,如内存和处理能力,而不需要自己完整的操作系统副本,从而确保轻量级和快速启动。
-
控制组 (cgroups)
控制组 (cgroups) 是 Linux 内核的一个功能,允许将 CPU、内存和 I/O 等资源分配给一组进程并进行管理。
-
联合文件系统 (UnionFS)
UnionFS 是一种文件系统服务,允许将多个文件系统叠加在一个统一的视图中。
-
命名空间 (Namespaces)
命名空间是 Linux 内核的另一个功能,提供了进程隔离。
-
官方 底层技术
◇什么是命名空间?
Docker 命名空间是 Linux 的一个基本功能,Docker 使用它来为容器创建隔离的环境。它们通过创建全局系统资源的独立实例来提供一层隔离,使每个容器都认为自己拥有一组独特的资源。Docker 利用了几种类型的命名空间,包括 PID(进程 ID)、NET(网络)、MNT(挂载)、UTS(Unix 分时系统)、IPC(进程间通信)和 USER 命名空间。通过利用这些命名空间,Docker 可以创建轻量级、可移植且安全的容器,这些容器在不同的环境中能够一致地运行。
- 官方 Docker 命名空间
- 文章 Linux 命名空间
◇控制组 (cgroups)
控制组 (cgroups) 是 Linux 内核的一个功能,允许您在系统上运行的进程组之间分配和管理资源,如 CPU、内存、网络带宽和 I/O。它在提供资源隔离和限制运行容器可以使用的资源方面起着至关重要的作用。Docker 利用 cgroups 对容器实施资源约束,使它们具有一致且可预测的行为。以下是 cgroups 在 Docker 容器中的一些关键特性和优势:
- 官方 控制组
- 文章 控制组 - Medium
- 视频 cgroups、runc 和 containerD 介绍
◇联合文件系统 (UnionFS)
联合文件系统,也称为 UnionFS,在 Docker 的整体功能中起着至关重要的作用。它是一种独特的文件系统,通过叠加多个目录来创建虚拟的分层文件结构。UnionFS 不是修改原始文件系统或合并目录,而是允许在单个挂载点上同时挂载多个目录,同时保持它们的内容分离。这一特性在 Docker 的背景下尤其有益,因为它允许我们通过最小化重复和减少容器镜像大小来管理和优化存储性能。
- 文章 AUFS(高级多层统一文件系统)
- 文章 OverlayFS(叠加文件系统)
- 文章 Btrfs(B 树文件系统)
- 文章 ZFS(Z 文件系统)
3. 安装设置
Docker 提供了一个名为 Docker Desktop 的桌面应用程序,简化了安装和设置过程。还有一种选择是使用 Docker Engine 进行安装,但请注意,仅安装 Docker Engine 不会提供任何图形用户界面(GUI)功能。
◇Docker Desktop(Win / Mac / Linux)
Docker Desktop 是一个易于安装的应用程序,使开发人员能够快速在桌面计算机上设置 Docker 环境。它适用于 Windows、macOS 和 Linux 操作系统。Docker Desktop 设计有图形界面,简化了管理和运行 Docker 容器的过程,提供了用户友好的体验,并与主机操作系统无缝集成。
- 官方 Docker Desktop 文档
- 官方 Docker 入门指南
- 官方 Docker Hub
- feed 探索关于 Docker 的热门帖子
◇Docker Engine(Linux)
“Docker Desktop” 和 “Docker Engine” 之间经常存在混淆。Docker Engine 特指 Docker Desktop 组件的一个子集,这些组件是免费且开源的,并且只能在 Linux 上安装。Docker Engine 可以构建容器镜像、运行容器,并且通常可以完成 Docker Desktop 的大部分功能,但它仅适用于 Linux,并且不提供 Docker Desktop 所提供的所有开发者体验优化。
4. Docker 基础
Docker 是一个简化构建、打包和部署应用程序的平台,应用程序运行在轻量级、可移植的容器中。在本节中,我们将介绍 Docker 的基础知识、其组件以及入门所需的关键命令。
-
什么是容器?
容器是一个轻量级、独立且可执行的软件包,包含运行应用程序所需的所有依赖项(库、二进制文件和配置文件)。容器将应用程序与其环境隔离,确保它们在不同系统上一致运行。
-
Docker 组件
Docker 生态系统中有三个关键组件:
- Dockerfile:一个包含构建 Docker 镜像指令(命令)的文本文件。
- Docker 镜像:容器的快照,由 Dockerfile 创建。镜像存储在注册表中,如 Docker Hub,并且可以从注册表中拉取或推送镜像。
- Docker 容器:Docker 镜像的运行实例。
-
Docker 命令
以下是一些您会经常使用的基本 Docker 命令:
docker pull <image>
:从注册表(如 Docker Hub)下载镜像。docker build -t <image_name> <path>
:从 Dockerfile 构建镜像,其中<path>
是包含 Dockerfile 的目录。docker image ls
:列出本地机器上所有可用的镜像。docker run -d -p <host_port>:<container_port> --name <container_name> <image>
:从镜像运行容器,并将主机端口映射到容器端口。docker container ls
:列出所有正在运行的容器。docker container stop <container>
:停止正在运行的容器。docker container rm <container>
:删除已停止的容器。docker image rm <image>
:从本地机器上删除镜像。
5. Docker 中的数据持久化
Docker 允许您运行容器,这些容器是隔离的代码片段,包括应用程序及其依赖项,与主机操作系统分离。容器默认是短暂的,这意味着一旦容器终止,存储在容器中的任何数据都将丢失。为了解决这个问题并在容器生命周期中保留数据,Docker 提供了多种数据持久化方法。
◇临时容器文件系统
默认情况下,Docker 容器内的存储是临时的,这意味着在容器内进行的任何数据更改或修改只会持续到容器停止并被移除为止。一旦容器停止并移除,所有相关数据都将丢失。这是因为 Docker 容器本质上是无状态的。这种临时或短暂的存储称为“临时容器文件系统”。这是 Docker 的一个重要特性,因为它可以在不同环境中快速且一致地部署应用程序,而无需担心容器的状态。
◇卷挂载
卷挂载是一种将主机系统上的文件夹或文件映射到容器内的文件夹或文件的方法。这样即使容器被移除,数据也可以保留在容器外部。此外,多个容器可以共享同一个卷,使得容器之间的数据共享变得容易。
- 官方 Docker 卷
- 官方 Docker 卷标志
- 视频 6 分钟解释 Docker 卷
◇绑定挂载
与卷相比,绑定挂载的功能有限。当您使用绑定挂载时,主机上的文件或目录会被挂载到容器中。文件或目录通过其在主机上的绝对路径引用。相比之下,当您使用卷时,会在主机的 Docker 存储目录中创建一个新目录,并由 Docker 管理该目录的内容。
6. 使用第三方镜像
第三方镜像是 Docker Hub 或其他容器注册表上提供的预构建 Docker 容器镜像。这些镜像由个人或组织创建和维护,可以作为容器化应用程序的起点。
◇使用数据库
在 Docker 容器中运行数据库可以帮助简化开发过程并简化部署。Docker Hub 提供了许多流行的数据库的预构建镜像,例如 MySQL、PostgreSQL 和 MongoDB。
◇使用 Docker 创建交互式测试环境
Docker 允许您创建隔离的、一次性的环境,这些环境可以在测试完成后删除。这使得与第三方软件合作、测试不同的依赖项或版本以及快速实验变得更加容易,而不会破坏本地设置。
- 官方 启动开发环境
- 文章 测试环境 - Medium
◇命令行工具
Docker 镜像可以包含命令行工具或独立应用程序,我们可以在容器内运行这些工具。
7. 构建容器镜像
容器镜像是可执行的软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、库和设置。通过构建自定义镜像,您可以在任何支持 Docker 的平台上无缝部署应用程序及其所有依赖项。构建容器镜像的关键组件是 Dockerfile
。它本质上是一个脚本,包含如何组装 Docker 镜像的指令。Dockerfile 中的每条指令都会在镜像中创建一个新层,从而更容易跟踪更改并最小化镜像大小。以下是一个简单的 Dockerfile 示例:
- 官方 Docker 镜像构建器
- 官方 Dockerfile 参考
- 开源 Dockerfile 示例
◇Dockerfile
Dockerfile 是一个文本文档,包含 Docker 引擎用于构建镜像的指令列表。Dockerfile 中的每条指令都会在镜像中添加一个新层。Docker 将根据这些指令构建镜像,然后您可以从该镜像运行容器。
- 官方 Dockerfile 参考
- 官方 Dockerfile 最佳实践
- 开源 Dockerfile 示例
◇高效的层缓存
在构建容器镜像时,Docker 会缓存新创建的层。这些层可以在构建其他镜像时重复使用,从而减少构建时间并最小化带宽使用。然而,为了充分利用这种缓存机制,您应该了解如何高效地使用层缓存。Docker 会为 Dockerfile 中的每条指令(例如 RUN
、COPY
、ADD
等)创建一个新层。如果自上次构建以来指令没有更改,Docker 将重用现有层。
- 官方 Docker 层缓存
- 视频 层缓存
◇减少镜像大小
减少 Docker 镜像大小对于优化存储、传输速度和部署时间至关重要。关键策略包括使用像 Alpine Linux 这样的最小化基础镜像、利用多阶段构建排除不必要的构建工具、删除不必要的文件和包,以及通过合并命令来最小化层数。
- 官方 多阶段构建
- 官方 Docker 最佳实践
- 订阅 探索关于安全的顶级文章
8. 容器注册表
容器注册表是 Docker 容器镜像的集中存储和分发系统。它允许开发人员轻松地以这些镜像的形式共享和部署应用程序。容器注册表在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来在各种生产环境中分发容器镜像。
- 官方 Docker 注册表
- 官方 Docker Hub
- 官方 Artifact Registry
- 官方 Amazon ECR
- 官方 Azure 容器注册表
◇镜像标签最佳实践
Docker 镜像标签的最佳实践围绕创建清晰、一致且信息丰富的标签展开。采用语义版本控制进行发布,避免在生产中使用模糊的“latest”标签,并包含相关元数据,如构建日期或 Git 提交哈希。实施区分环境的策略,使用描述性标签表示变体,并在 CI/CD 管道中自动化标签。定期清理旧标签并记录您的约定,以保持清晰并促进团队范围内的采用。这些实践确保了高效的镜像管理,并改善了组织内的协作。
- 官方 Docker 标签
- 文章 Docker 镜像标签最佳实践
- 文章 语义版本控制
◇DockerHub 替代方案
容器镜像可以存储在许多不同的注册表中,而不仅仅是 Dockerhub。大多数主要云平台现在都提供容器注册表,例如 Google Cloud Platform 上的“Artifact Registry”、AWS 上的 Elastic Container Registry 和 Microsoft Azure 上的 Azure 容器注册表。GitHub 还提供了自己的注册表,当容器构建包含在 GitHub Actions 工作流中时非常有用。
- 官方 DockerHub
- 官方 Artifact Registry
- 官方 Amazon ECR
- 官方 Azure Container Registry
- 官方 GitHub Container Registry
◇DockerHub
Docker Hub 是一个基于云的注册表服务,作为 Docker 容器镜像的主要公共仓库。它允许用户存储、共享和分发 Docker 镜像,提供免费的公共仓库和付费的私有仓库,并与 Docker CLI 无缝集成,使镜像的推送和拉取变得容易。它包含由软件供应商维护的官方镜像、链接到源代码仓库的自动化构建以及基于仓库事件触发操作的 Webhook。
- 官方 DockerHub
- 官方 DockerHub 仓库
- 官方 DockerHub Webhooks
9. 运行容器
运行 Docker 容器通常通过简单的 docker run
命令完成,该命令结合了 docker create
和 docker start
命令的功能。
- 官方 Docker Run
- 官方 Docker Containers
- 官方 Docker Exec
- 官方 Docker Stop
◇运行容器
docker run
命令从指定的镜像创建并启动一个新容器。它结合了 docker create
和 docker start
操作,提供了多种选项来定制容器的运行时环境。用户可以设置环境变量、映射端口和卷、定义网络连接以及指定资源限制。该命令支持后台运行的分离模式、用于 shell 访问的交互模式,并且能够覆盖镜像中定义的默认命令。常见的标志包括用于分离模式的 -d
、用于端口映射的 -p
、用于卷挂载的 -v
以及用于分配自定义容器名称的 --name
。理解 docker run
是有效部署和管理 Docker 容器的基础。
- 官方 Docker Run
◇Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许您使用一个简单的 YAML 文件(称为 docker-compose.yml
)来创建、管理和运行应用程序。该文件描述了应用程序的服务、网络和卷,使您能够通过一个简单的命令轻松运行和管理容器。
运行时配置选项
Docker 运行时配置选项为您提供了对容器环境的强大控制。通过调整资源限制、网络设置、安全配置文件和日志驱动程序,您可以优化性能并增强安全性。您还可以找到设置环境变量、挂载卷和覆盖默认行为的选项——所有这些对于根据您的特定需求定制容器至关重要。对于更高级的用户,还有一些工具可以调整内核功能并设置重启策略。无论您是使用命令行标志还是 Docker Compose 文件,这些选项都有助于确保您的容器在任何部署环境中都能平稳一致地运行。
- 官方 Docker 文档
- 文章 Docker 运行时参数
10. 容器安全
容器安全涵盖了一系列实践和工具,旨在保护容器化应用程序从开发到部署和运行时的安全。它包括保护容器镜像、确保仅使用可信且无漏洞的代码、为容器环境实施强访问控制,以及配置容器以遵循最小权限原则。此外,它还包括监控异常行为、保护容器之间的通信以及维护主机环境的安全性。有效的容器安全无缝集成到 DevSecOps 工作流中,以在整个容器生命周期中提供持续的可见性和保护,而不会影响开发速度或敏捷性。
- 官方 Docker 安全
- 文章 Kubernetes 安全最佳实践
◇镜像安全
镜像安全是在您的环境中部署 Docker 容器的关键方面。确保您使用的镜像是安全的、最新的且没有漏洞是至关重要的。在本节中,我们将回顾保护和管理 Docker 镜像的最佳实践和工具。从公共仓库拉取镜像时,始终使用受信任的官方镜像作为容器化应用程序的起点。官方镜像经过 Docker 审核,并定期更新安全修复程序。您可以在 Docker Hub 或其他受信任的注册表中找到这些镜像。
- 官方 Docker 内容信任
- 官方 Docker Hub
◇运行时安全
Docker 中的运行时安全侧重于确保容器在执行期间的安全性和完整性,防止容器化应用程序在运行时可能出现的漏洞和恶意活动。这包括监控容器行为以检测异常、实施访问控制以限制权限,并使用工具实时检测和响应可疑活动。有效的运行时安全还确保仅部署经过验证的镜像,并持续审核系统以保持合规性,从而在整个容器生命周期中提供强大的防御层,防止漏洞利用并维持所需的安全态势。
- 官方 Docker 安全
- 官方 Docker 安全最佳实践
11. Docker CLI
Docker 命令行界面(CLI)是一个强大的工具,用于与 Docker 引擎进行交互,使开发人员和运维人员能够构建、管理和排查容器及相关资源。通过广泛的命令,Docker CLI 提供了对 Docker 各个方面的控制,包括创建和管理容器(docker run
、docker stop
)、构建镜像(docker build
)、管理网络(docker network
)、处理存储(docker volume
)以及检查系统状态(docker ps
、docker info
)。其直观的语法和灵活性使用户能够自动化复杂的工作流程,简化开发过程,并轻松维护容器化应用程序,使其成为 Docker 管理和编排的基础工具。
- 官方 Docker CLI
- 官方 Docker Compose
◇Docker 镜像
Docker 镜像是轻量级、独立且可执行的软件包,包含运行软件所需的一切,如应用程序代码、运行时、库和系统工具。它们作为创建容器的蓝图,并以分层方式构建,每一层代表文件系统的更改,从而实现高效的存储和分发。Docker 镜像可以存储在 Docker Hub 等容器注册表中,并从这些注册表中拉取,使开发人员能够在不同环境中一致地共享、部署和版本化他们的应用程序,确保可重复性并简化依赖管理过程。
- 文章 Docker 镜像和容器有什么区别?
- 视频 什么是镜像?
◇容器
容器是隔离的轻量级环境,使用共享的操作系统内核运行应用程序,确保在不同计算环境中的一致性和可移植性。它们封装了运行应用程序所需的一切,如代码、依赖项和配置,使得容器化应用程序可以轻松地在任何地方移动和运行。使用 Docker CLI,您可以通过 docker run
创建、启动、停止和管理容器,使用 docker ps
列出正在运行的容器,使用 docker stop
停止它们,并使用 docker exec
实时与它们交互。CLI 为开发人员提供了一个强大的界面,可以轻松构建、控制和调试容器,从而实现简化的开发和运维工作流程。
◇Docker 卷
Docker 卷是用于管理和存储容器文件系统外部数据的持久存储解决方案,确保即使容器被删除或重新创建,数据也能保持完整。它们非常适合存储需要在容器重启和更新时持久化的应用程序数据、日志和配置文件。通过 Docker CLI,您可以使用 docker volume create
定义新卷,使用 docker volume ls
列出所有卷,并使用 docker run -v
将卷挂载到特定容器。这种方法有助于保持数据完整性,简化备份过程,并支持容器之间的数据共享,使卷成为有状态容器化应用程序的核心部分。
- 官方 Docker 卷
- 官方 Docker 卷命令
◇Docker 网络
Docker 网络使容器能够相互通信并与外部系统通信,为微服务架构提供必要的连接性。默认情况下,Docker 提供了几种网络类型,如桥接、主机和覆盖网络,每种类型适用于不同的用例,如隔离环境、高性能场景或多主机通信。使用 Docker CLI,您可以通过 docker network create
定义自定义网络,使用 docker network ls
列出现有网络,并使用 docker network connect
将容器连接到网络。这种灵活性使开发人员能够控制容器的交互方式,确保分布式应用程序之间的安全高效通信。
- 官方 Docker 网络
- 官方 Docker 网络命令
- 视频 Docker 网络
12. 开发者体验
Docker 通过为构建、测试和运行应用程序提供一致且隔离的环境,显著提升了开发者体验,消除了“在我机器上能运行”的问题。使用 Docker,开发人员可以将他们的应用程序和依赖项打包到可移植的容器中,确保从本地开发到 staging 和生产环境的一致性。简化的设置和环境的可重复性加速了入职流程,最大限度地减少了冲突,并使开发人员能够专注于编码而不是排查配置问题。此外,Docker Compose 等工具可以快速编排复杂的多容器应用程序,使原型设计、迭代和协作变得更加容易,最终简化了整个开发生命周期。
◇Docker 中的热重载
尽管我们可以通过启用层缓存来加速镜像构建,但我们不希望每次代码更改时都重新构建容器镜像。相反,我们希望容器中的应用程序状态能够立即反映更改。我们可以通过绑定挂载和热重载工具的组合来实现这一点!
- 文章 热重载 - Docker
◇Docker 中的调试器
为了使容器开发与本地开发具有竞争力,我们需要能够在容器内运行和附加调试器。
- 官方 Docker Buildx 调试
- 文章 Docker 中的调试器
◇测试
我们希望在与生产环境尽可能相似的环境中运行测试,因此在容器内运行测试是唯一合理的选择!这可以包括单元测试、集成测试和端到端测试,所有测试都在 Docker 容器内运行,以模拟真实场景,同时避免外部依赖的干扰。使用 Docker CLI 和 Docker Compose 等工具,您可以创建隔离的测试环境,并行运行测试,并自动启动和拆除必要的基础设施。
- 文章 运行测试 - Docker
- 动态 探索关于测试的热门帖子
◇持续集成 (CI)
持续集成是在将代码推送到版本控制系统时自动执行某些操作(例如构建、测试等)的理念。
对于容器,我们可能希望执行以下操作:
-
构建容器镜像
-
执行测试
-
扫描容器镜像以查找漏洞
-
使用有用的元数据标记镜像
-
推送到容器注册表
13. 部署容器
部署容器是使用 Docker 和容器化技术更高效地管理应用程序、轻松扩展并确保跨环境一致性能的关键步骤。本主题将概述如何部署 Docker 容器以创建和运行您的应用程序。
- 官方 Docker 部署
- 官方 Docker Compose
- 官方 Docker Swarm
◇用于部署容器的 PaaS 选项
用于部署容器的平台即服务(PaaS)选项提供了一个简化的托管环境,使开发人员能够构建、部署和扩展容器化应用程序,而无需担心底层基础设施。流行的 PaaS 产品包括 Google Cloud Run、Azure App Service、AWS Elastic Beanstalk 和 Heroku,它们抽象了容器编排的复杂性,同时提供自动扩展、与 CI/CD 管道的轻松集成以及监控功能。这些平台通过允许团队专注于应用程序逻辑而不是服务器管理,支持快速开发和部署,提供了一种以最小操作开销在生产环境中运行容器的无缝方式。
- 官方 用于部署容器的 PaaS 选项
- 官方 Azure 容器实例
- 官方 Google Cloud Run
- 官方 IBM Cloud Code Engine
- 官方 Amazon Elastic Container Service
◇Kubernetes
Kubernetes 是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它通过将容器组织成称为 pod 的逻辑单元,管理服务发现、负载均衡和通过声明式配置进行扩展,提供了一个强大的框架来处理复杂的容器工作负载。Kubernetes 使团队能够在机器集群上部署容器,通过自动重启、替换和回滚机制等自愈功能确保高可用性和容错性。凭借其广泛的生态系统和灵活性,Kubernetes 已成为运行大规模分布式应用程序的事实标准,简化了操作并提高了容器化工作负载的可靠性。
- 官方 Kubernetes
- 官方 Docker Swarm
◇Docker Swarm
Docker Swarm 是 Docker 的原生容器编排工具,允许用户在 Docker 主机集群上部署、管理和扩展容器。通过将一组 Docker 节点转换为一个统一的集群,Swarm 使用简单的声明式命令提供高可用性、负载均衡和自动容器调度。通过服务发现、滚动更新和通过 TLS 加密的集成安全性等功能,Docker Swarm 提供了一个比 Kubernetes 等更复杂的编排工具更易于使用的替代方案。它与 Docker CLI 的紧密集成和易于设置使其成为中小型部署的理想选择,其中简单性和直接管理是优先考虑的因素。
- 官方 Docker Swarm
◇Nomad:部署容器
Nomad 是一个集群管理器和调度器,使您能够部署、管理和扩展容器化应用程序。它自动处理节点故障、资源分配和容器编排。Nomad 支持运行 Docker 容器以及其他容器运行时和非容器化应用程序。
- 官方 Nomad 文档