【问题标题】:Docker-Compose with Docker 1.12 "Swarm Mode"Docker-Compose 与 Docker 1.12“群模式”
【发布时间】:2016-07-13 14:04:41
【问题描述】:
有人知道如何(如果可能的话)使用新的 docker 1.12 'swarm mode' swarm 对 swarm 运行 docker-compose 命令吗?
我知道使用之前的“Docker Swarm”,您可以通过更新 DOCKER_HOST 以指向 swarm master 来直接针对 swarm 运行 docker-compose 命令:
export DOCKER_HOST="tcp://123.123.123.123:3375"
然后像在单个 Docker 引擎实例上运行命令一样简单地执行命令。
或者docker-compose bundle 正在取代这个功能?
【问题讨论】:
标签:
docker
docker-compose
docker-swarm
【解决方案1】:
我意识到我的问题措辞含糊,实际上有两个部分。然而,最终,我能够找到解决这两个问题的方法。
1) 您能否在远程机器上运行的 Docker 1.12 中直接“针对”集群/集群模式运行命令?
虽然您不能真正“针对”集群运行命令,但您可以在集群的主节点上运行 docker service 命令,以便在该集群上运行服务。
您还可以配置 Docker 守护程序(作为 swarm 主节点的 docker 守护程序)侦听 TCP 端口,以便在外部公开 Docker API。
2) Docker 1.12 swarm-mode 中还能使用 docker-compose 文件启动服务吗?
是的,尽管这些功能目前是 Docker 的“实验性”功能的一部分。这意味着您必须下载/安装包含实验性功能的版本(查看 github)。
您基本上遵循这些说明https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md
从 docker-compose.yml 文件到分布式应用程序包,然后到应用程序堆栈(这是您的服务实际运行的时间)。
$ docker-compose bundle
$ docker deploy [OPTIONS] STACK
这是我所做的:
-
在我的远程 swarm manager 节点上,我使用以下选项启动了 docker:
docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 &
这会将 Docker 守护进程配置为侦听标准 docker 套接字 unix:///var/run/docker.sock 和 localhost:2375。
警告:为了简单起见,我不会在此处启用 TLS
在我的本地计算机上,我更新 docker 主机环境变量以指向我的 swarm 主节点。
$ export DOCKER_HOST="tcp://XX.XX.XX.XX:2377"(使用您的 IP 填充)
导航到我的 docker-compose.yml 文件的目录
从我的 docker-compose.yml 文件创建一个捆绑文件。确保包含 .dab 扩展名。
docker-compose bundle --fetch-digests -o myNewBundleFile.dab
从捆绑文件创建应用程序堆栈。不要在此处指定 .dab 扩展名。
$ docker deploy myNewBundleFile
现在我仍然遇到一些与网络相关的问题,但我已经成功地从我未修改的 docker-compose.yml 文件启动并运行了我的服务。我遇到的网络问题记录在这里:https://github.com/docker/docker/issues/23901
【解决方案3】:
这是不可能的。 Compose 使用容器来创建服务的客户端概念。 Docker 1.12 Swarm 模式引入了一个新的服务器端服务概念。
docker-compose bundle; docker stack deploy 是让 Compose 文件在 Swarm 模式下运行的方法是正确的。