创建多个 Docker 容器

Creating multiple Docker container

我必须在不同主机上创建大量 Docker 容器(例如 3 台主机上各有 50 个容器)。这些容器都具有相同的图像、配置等,只有每个容器的网络地址和 ID 应该不同(所以基本上我想创建一个巨大的虚拟容器网络)。 有办法实现吗?

我看过 Helios 和 Kubernetes 等技术,但它们似乎只在每个代理上部署一个容器。我考虑过在 Helios 中创建很多不同的作业,然后将它们中的每一个部署到它的代理上,但这对我来说似乎有点脏。

这正是 Kubernetes 非常适合的用例类型。

你应该使用 Replica Set。创建副本集时,您指定一个模板,告诉系统如何创建每个容器实例以及所需数量的副本。然后它将在集群中的可用节点数中创建该数量的副本。

需要注意的是,默认情况下,Kubernetes 只允许您拥有约 100 pods 个节点,但如果您需要更多,可以使用命令行标志更改此数字。

对于Docker具体的解决方案,可以使用Swarm和Compose。

创建您的 Docker 3 个节点的 Swarm 集群并将您的环境更改为该 Swarm。 (下面假设每个主机都在 2375 上侦听,这对于专用网络来说是可以的,但是您需要 TLS 设置并切换到 2376 以获得更高的安全性。)

cat >cluster.txt <<EOF
node1:2375
node2:2375
node3:2375
EOF
docker run -d -P --restart=always --name swarm-manager \
  -v ./cluster.txt:/cluster.txt \
  swarm manage file:///cluster.txt
export DOCKER_HOST=$(docker port swarm-manager 2375)

在 docker-compose.yml 和 运行 docker-compose scale my-service=150 中定义您的服务。如果您的 Swarm 设置了默认的传播策略,它将根据每个容器 运行ning(或停止)的容器数量将它们分布在 3 个主机上。

cat >docker-compose.yml <<EOF
my-app:
  image: my-app
EOF
docker-compose scale my-app=150

请注意,docker-compose 相对于其他工具的缺点是它无法纠正中断,直到您重新运行它。