簡體   English   中英

用docker-compose填充碼頭機

[英]Populating docker-machine with docker-compose

編輯如何使用docker compose在docker-machine上啟動容器?

我已經配置了3台泊塢機,並將兩台工作人員連接到一台主機上。 但是,我的代碼或服務似乎都沒有出現在機器中。 如何在docker機器上運行docker-compose文件?

通常在開發中我運行docker-compose up 但是,盒子上沒有docker-compose。 我不確定機器在什么時候開始運行docker容器或者怎么做。 我通過docker-compose.prod.yml作為創建堆棧的一部分。 echo 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

你不會使用1個泊塢機來運行其他碼頭工人。 這不是用於撰寫的組合。

您必須設置一個docker compose腳本,其中所有計算機都“ 鏈接 ”,以便它們可以相互通信。 無論你做什么,都取決於你想要運行的軟件。 (例如,如果1個主機必須使用其他節點,則為主機提供配置文件,其中/如何找到節點)。

一個例子:

看看我為我的ELK-stack創建的docker -compose文件在該文件中,我聲明了2台機器(Elasticsearch和Kibana),並將它們與(現已棄用的)鏈接標簽鏈接在一起。 (這現在半自動發生,請參閱文檔以獲取更多詳細信息。)

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

這使得Kibana實例(假設這將是一個主機)與其各自的Elasticsearch實例(圖像,這將是一個從屬機器)進行通信。

接下來你最后的陳述:

我希望能夠使用docker-machine ssh主機。 然后在那個shell的內部能夠進行碼頭組合。

這在某種程度上是正確的,您可以使用以下命令訪問Docker中的交互式(bash)shell:

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

這不會允許你運行docker-compose,因為這肯定會導致臭名昭着的Droste效果的變化:

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

圖片來源

你的新問題

如果我必須手動rsync所有的dirs,我很好奇堆棧實際上做了什么?

不,您不必手動執行此操作,您可以在容器中使用持久存儲來訪問其他文件夾中的數據。 您基本上分配一個本地文件夾來保存數據,然后將該文件夾“綁定”到docker機器上。 從而允許碼頭工人自由訪問數據。 閱讀文檔以獲取更多信息。

對於堆棧,堆棧在docker cloud中使用,並且與docker-compose腳本具有相同的通用性。 當您部署到docker-cloud而不是單個docker實例時,它確實提供了一些額外的部署選項。 再次閱讀文檔以獲取更多信息。

您的docker-in-docker編輯

由於您的最新編輯,我覺得有義務詳細了解docker-in-docker的事情。

通常不建議在docker中運行docker容器。 雖然它有可能,它甚至已在docker博客中出現

請允許我重申, 您的用例需要兄弟容器而不是嵌套容器 請再次閱讀我的帖子,但要對兄弟容器的想法持開放態度。 如果您有任何(具體)問題,我將能夠更好地幫助您;)

設置“碼頭機”

設置docker可以完成一千種方式,其中一種方法可以在這個github頁面找到。

我為朋友編寫了該教程,它涵蓋了docker的安裝和docker機器的自動啟動(使用docker run和docker-compose)。

從它那里取出它,它在過去很好地服務於我:)

我強烈建議安裝Portainer來管理/檢查您的容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM