Docker-Compose with Docker 1.12" Swarm Mode"

时间:2016-07-13 14:04:42

标签: docker docker-compose docker-swarm

有没有人知道如何(如果可能的话)使用新的docker 1.12' swarm模式'对群组运行docker-compose命令。一群?

我知道以前的Docker Swarm'你可以通过更新DOCKER_HOST指向swarm master来直接对swarm运行docker-compose命令:
export DOCKER_HOST="tcp://123.123.123.123:3375"
然后简单地执行命令,就好像你是针对单个Docker引擎实例运行它们一样。

OR是docker-compose bundle正在取代的功能吗?

3 个答案:

答案 0 :(得分:9)

我意识到我的问题含糊不清,实际上有两个部分。然而,最终,我能够找到两个问题的解决方案。

1)你可以在远程机器上运行的Docker 1.12中直接“反对”swarm / swarm模式运行命令吗?

虽然你无法真正对'群'运行命令,但你可以在群的主节点上运行docker service命令,以便在该群上运行服务。
您还可以配置Docker守护程序(作为swarm主节点的docker守护程序)侦听TCP端口,以便在外部公开Docker API。

2)您是否仍然可以使用docker-compose文件在Docker 1.12 swarm-mode中启动服务?

是的,虽然这些功能目前是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

这就是我所做的:

  1. 在我的远程swarm管理器节点上,我使用以下选项启动了docker:

    docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 &

    这会将Docker守护程序配置为侦听标准docker socket unix:///var/run/docker.socklocalhost:2375上的内容。
    警告:为了简单起见,我在这里不启用TLS

  2. 在我的本地计算机上,我更新了docker主机环境变量以指向我的swarm主节点 $ export DOCKER_HOST="tcp://XX.XX.XX.XX:2377"(填充您的IP)

  3. 导航到我的docker-compose.yml文件目录

  4. 从我的docker-compose.yml文件创建一个包文件。请务必加入.dab扩展名。 docker-compose bundle --fetch-digests -o myNewBundleFile.dab

  5. 从捆绑文件创建应用程序堆栈。这里不要指定.dab扩展名。
    $ docker deploy myNewBundleFile

  6. 现在我仍然遇到一些与网络相关的问题,但我已经成功地从我未经修改的docker-compose.yml文件中获取并运行了我的服务。我遇到的网络问题在此处记录:https://github.com/docker/docker/issues/23901

答案 1 :(得分:2)

虽然Docker Compose中对Swarm模式的官方支持仍在进行中,但我已经创建了一个简单的脚本,可以为您提取docker-compose.yml文件并运行docker service命令。有关详细信息,请参阅https://github.com/ddrozdov/docker-compose-swarm-mode

答案 2 :(得分:1)

这是不可能的。 Compose使用容器来创建服务的客户端概念。 Docker 1.12 Swarm模式引入了一种新的服务器端服务概念。

你是正确的docker-compose bundle; docker stack deploy是在Swarm模式下运行Compose文件的方法。