容器编排和一些 docker 功能

Containers Orchestations and some docker functions

我熟悉打包、构建和部署软件或 unless 小软件的体系结构和实践。

如果我突然将概念与特定工具混为一谈(有时这是不可避免的),请告诉我是否有误。

在路上,我一直在阅读和学习图像和容器术语及其各自的关系,以便开始构建更好的工作流软件系统。

我对 docker 上下文中的服务编排有疑问:

我可以使用 docker-compose 代替容器链接的使用,以便自动化我的服务工作流程,并 运行 使用 .yaml 文件配置来宁多容器。

我正在阅读容器编排术语,它定义了当我们有不同 "software pieces" 彼此分离时容器之间的关系,以及这些容器如何作为一个系统进行交互。

好吧,我想我已经很好地阅读了文档 :P

我的问题是:

一个docker级别,容器链接docker-compose是一种容器编排方式吗?

或者使用 docker,如果我想进行容器编排……我应该使用 docker-swarm 吗?

你应该忘记你曾经读过容器链接。它们在 pure Docker 中已经过时多年。它们与编排问题也不是特别相关。

Docker Compose 是一个简单的编排工具,但我实际上 class 它是一个编排工具。可以同时启动多个容器;如果堆栈的配置发生变化,它可以重新启动各个容器。它相当面向 Docker 的原生功能。

Docker Swarm 主要只是一种将多个物理主机连接在一起的方式,docker 命令可以将它们作为一个连接的集群。我可能不会单独调用该功能 "orchestration",但它确实具有一定数量的 "scheduling" 或 "placement" 功能(Swarm,而不是您,决定哪些容器 运行在哪些主机上)。

在我可能称之为 "orchestration" 工具的其他东西中,我可能会将它们分为两个阵营:

  1. 通用系统自动化工具恰好具有一些Docker功能。例如,您可以同时使用 Ansible 和 Salt Stack 来启动 Docker 容器,但您也可以将这些工具用于许多其他事情。他们有能力说 "run container A on system X and container B on system Y",但如果您需要主机间通信或其他细节,那么您也需要设置它们(可能使用相同的工具)。

  2. 专门构建的 Docker 自动化工具,例如 Docker Compose、Kubernetes 和 Nomad。这些往往有一个更完整的故事,关于你如何用一堆容器、服务复制、滚动更新和服务发现来构建一个完整的堆栈,但你大多不能用它们来管理尚未完成的任务在 Docker.

您可能会考虑的其他一些功能:

  • Orchestration:如何同时启动多个连接的容器?
  • 网络:一个容器如何在集群内与另一个容器通信?外部呼叫者如何连接到系统?
  • 调度:在多主机设置中哪个系统上有哪些容器运行?
  • 服务发现: 当一个容器要调用另一个容器时,它如何知道调用谁?
  • 管理平面:作为运营商,您如何做一些事情,比如改变某些特定服务的副本数量,或者导致服务更新到更新的图像?