用docker-compose填充docker-machine

编辑如何启动docker机器上的容器与docker组成?

我配备了3台docker机器,并将两台作为工人join到一台主机中。 但是,我的代码或服务似乎没有出现在机器中。 如何在docker机器上运行docker-compose文件?

通常在开发中我运行docker-compose up 。 但是,docker-compose在框中不可用。 我不确定机器在什么时候开始运行docker集装箱或者如何完成。 作为创build堆栈的一部分,我传递了docker-compose.prod.ymlecho docker stack deploy -c docker-compoe.prod.yml app

来自Heroku的这一切都是非常新的。 只是想知道如果做到这一点的唯一方法是ssh进入每个框,并手动复制文件。

我希望能够docker-machine ssh host 。 然后在那个shell里面能够docker-compose up

如果这是真的,我必须手动rsync所有的dirs结束,我很好奇堆栈实际上是什么?

编辑

 version: "3" services: api: image: "api" command: rails server -b "0.0.0.0" -e production depends_on: - db - redis deploy: replicas: 3 resources: cpus: "0.1" memory: 50M restart_policy: condition: on-failure env_file: - .env-prod networks: - apinet ports: - "3000:3000" client: image: "client" depends_on: - api deploy: restart_policy: condition: on-failure env_file: - .env-prod networks: - apinet - clientnet ports: - "4200:4200" - "35730:35730" db: deploy: placement: constaints: [node.role == manager] restart_policy: condition: on-failure env_file: .env-prod image: mysql ports: - "3306:3306" volumes: - ~/.docker-volumes/app/mysql/data:/var/lib/mysql/data redis: deploy: placement: constaints: [node.role == manager] restart_policy: condition: on-failure image: redis:alpine ports: - "6379:6379" volumes: - ~/.docker-volumes/app/redis/data:/var/lib/redis/data nginx: image: app_nginx deploy: restart_policy: condition: on-failure env_file: .env-prod depends_on: - client - api networks: - apinet - clientnet ports: - "80:80" networks: apinet: driver: overlay clientnet: driver: overlay 

你不会使用1docker来运行其他docker。 这不是用来构成的。

你必须build立一个docker工人的脚本,在这个脚本中,所有的机器都是“ 链接的 ”,这样他们就可以相互交谈了。 无论你做什么,取决于你想运行的软件。 (例如,如果1台主机必须使用其他节点,你会为主机提供一个configuration文件,以查找节点的位置)。

一个例子:

看看我为我的ELK堆栈所做的docker-compose文件在这个文件中,我声明了2台机器(Elasticsearch和Kibana),并将它们与(现在不推荐的)链接标记链接在一起。 (这现在是半自动的,请参阅文档了解更多细节。)

然后在kibana.yml文件中(第10行),我将Kibana机器指向Elasticsearch机器(使用docker-compose name / linkname)。

这使Kibana实例(想象这将是一个主机)与其各自的Elasticsearch实例(图像这将是一个奴隶机)交谈。

接下来你最后的声明:

我希望能够docker机ssh主机。 然后在那个shell里面能够docker-up。

这在某种程度上是正确的,您可以通过使用以下命令来访问Docker中的交互式(bash)shell:

 docker exec --ti {ID/NAME of docker} /bin/bash 

这不会让你运行docker组合,但是这肯定会导致臭名昭着的Droste效应的变化:

Droste效果 -  https://www.flickr.com/photos/subblue/sets/72157609140149244/

图片来源 。

你的新问题

如果这是真的,我必须手动rsync所有的dirs结束,我很好奇堆栈实际上是什么?

不,您不必手动执行此操作,您可以使用容器中的持久存储来访问其他文件夹中的数据。 你基本上分配一个本地文件夹来保存数据,然后“绑定”该文件夹到docker机器。 从而允许docker员自由访问数据。 阅读文档以获取更多信息。

至于堆栈,堆栈在Docker云中使用,与docker-compose脚本具有相同的通用性。 它提供了一些额外的部署选项,可以在部署到docker-cloud而不是单个docker实例时看到。 再次阅读文档以获取更多信息。

您的docker泊坞窗编辑

由于你最近的编辑,我觉得有必要更详细地介绍docker工人的事情。

在Docker中运行docker集装箱通常不被推荐 。 这是可能的,甚至在docker博客中都有提及 。

让我重申一下, 你的用例需要兄弟容器没有嵌套的容器 。 请再次阅读我的post,但对兄弟容器的想法保持开放的态度。 如果你有任何(具体)的问题,我将能够帮助你更好的;)

build立一个“docker机”

设置docker可以做成千上万的方式,我可以在这个github页面find我的方法之一。

我写了一个朋友的教程,它涵盖了docker的安装和docker机器的自动启动(使用docker run和docker-compose)。

从中拿走你会的东西,它已经在过去为我服务了:)

我强烈build议安装Portainer来pipe理/检查你的容器。