用docker-compose填充docker-machine

编辑
如何使用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
最佳答案
您不会使用1个docker运行其他docker.那不是compose的用途.

您必须设置一个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效果的变化:

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

Picture source.

您的新问题

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来管理/检查您的容器.

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...