Docker-Compose与Docker 1.12“群模式”

有谁知道如何(如果可能)运行docker-compose命令,使用新的Docker 1.12“swarm模式”swarm?

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

或者是docker-compose bundle正在取代的这个function吗?

我意识到我的问题含糊其辞,实际上有两个部分。 不过最终我find了解决这两个问题的办法。

1)你是否可以在远程机器上运行的Docker 1.12中直接运行命令“swarm / swarm-mode”?

虽然你不能真正的运行命令,但是你可以在群集的主节点上运行docker service命令,以便在群集上运行服务。
您还可以configurationDocker守护进程(作为群集主节点的docker守护进程)侦听TCP端口,以便在外部公开Docker API。

2)你仍然可以使用Docker-compose文件在Docker 1.12群集模式下启动服务吗?

是的,尽pipe这些function目前是Docker“实验性”function的一部分。 这意味着您必须下载/安装包含实验function的版本(请查看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. 在我的远程群集pipe理器节点上,我使用以下选项启动docker:

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

    这将configurationDocker守护进程在标准unix:///var/run/docker.sock套接字unix:///var/run/docker.sock并在localhost:2375上进行侦听。
    警告:我不在这里启用TLS只是为了简单

  2. 在我的本地机器上,我更新了docker host环境variables来指向我的swarm主节点。
    $ export DOCKER_HOST="tcp://XX.XX.XX.XX:2377" (填入你的IP)

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

  4. 从我的docker-compose.yml文件创build一个包文件。 确保包含.dab扩展名。 docker-compose bundle --fetch-digests -o myNewBundleFile.dab

  5. 从包文件创build一个应用程序堆栈。 不要在这里指定.dab扩展名。
    $ docker deploy myNewBundleFile

现在我仍然遇到一些networking相关的问题,但是我已经成功地从我的未修改的docker-compose.yml文件中获得了服务。 我遇到的networking问题logging在这里: https : //github.com/docker/docker/issues/23901

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

这不可能。 撰写使用容器来创build服务的客户端概念。 Docker 1.12 Swarm模式引入了一个新的服务器端服务概念。

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

Interesting Posts