编辑
如何使用docker compose在docker机器上启动容器?
我已经配置了3台docker机器,并将其中两台作为工人加入一台主计算机.但是,机器上似乎没有我的代码或服务.如何在docker机器上运行docker-compose文件?
通常在开发中,我运行docker-compose.但是,包装箱上没有docker-compose.我不确定机器在什么时候开始运行Docker容器或如何完成.作为创建堆栈的一部分,我传递了docker-compose.prod.yml. echo docker stack deploy -c docker-compoe.prod.yml应用
所有这些都来自Heroku.只是想知道是否唯一的方法是将ssh插入每个框并手动复制文件.
我希望能够docker-machine ssh主机.然后可以在该shell内进行docker-compose.
如果确实需要手动将所有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
您必须设置一个docker compose脚本,其中所有机器均为“ linked”,以便它们可以相互通信.之后,您要做的事取决于您要运行的软件. (例如,如果1台主机必须使用其他节点,则可以为主机在哪里/如何找到这些节点的地方提供一个配置文件).
一个例子:
看看docker-compose file I made for my ELK-stack
在该文件中,我声明了2台计算机(Elasticsearch和Kibana),并将它们与(现在已弃用的)links标记链接在一起. (现在这是半自动发生的,有关更多详细信息,请参见documentation.)
然后在kibana.yml文件(第10行)中,将Kibana计算机指向Elasticsearch计算机(使用它的docker-compose name / linkname).
这使Kibana实例(想象这将是一个主机)可以与其各自的Elasticsearch实例(例如,这将是一台从机)进行对话.
接下来的最后一个语句:
I would expect to be able to docker-machine ssh host. And then inside
of that shell be able to docker-compose up.
在某种程度上,这是正确的,您可以使用以下命令访问Docker中的交互式(bash)shell:
docker exec --ti {ID/NAME of docker} /bin/bash
这将不允许您运行docker-compose,因为这肯定会导致臭名昭著的Droste效果的变化:
您的新问题
If it’s true that I have to manually rsync all of the dirs over,I’m
curIoUs what the stack actually does?
不,您不必手动执行此操作,您可以在容器中使用持久性存储来访问其他文件夹中的数据.您基本上会分配一个本地文件夹来保存数据,然后将该文件夹“绑定”到Docker机器.因此,允许泊坞窗自由访问数据.阅读documentation了解更多信息.
至于堆栈,堆栈在docker云中使用,并且与docker-compose脚本具有相同的通用目的.当您部署到docker-cloud而不是单个docker实例时,它确实提供了一些额外的部署选项.同样,请阅读documentation了解更多信息.
您的docker-in-docker编辑
由于您的最新编辑,我有义务详细介绍docker-in-docker方面的内容.
在Docker中运行Docker容器通常是not recommended.
不过,它甚至有可能在docker blog中得到了体现.
让我重申一下,您的用例需要同级容器而不是嵌套容器.请再次阅读我的文章,但对同级容器的想法持开放态度.如果您对此有任何(特定)问题,我将能够帮助您更好地解决;)
设置一个“ docker-machine”
设置docker可以完成一千种方法,我可以在github页面上找到其中一种方法.
我为一个朋友编写了该教程,其中涵盖了docker的安装和docker机器的自动启动(使用docker run和docker-compose).
从中获取您的意愿,它过去对我很有帮助:)
我强烈建议安装Portainer来管理/检查您的容器.