2016-11-22 35 views
9

我有一個docker-compose文件,它在同一主機中部署8個不同的docker服務。是否有可能將其部署在不同的主機上?我想在一臺主機上部署一些服務,並在其他主機上部署另一臺服務器。我需要使用碼頭羣?或者是一個更簡單的方法?Docker-compose:在多個主機中部署服務

我已經讀過它可以使用DOCKER_HOST完成,但是如果使用此變量配置/ etc/default/docker,則所有服務都將在遠程主機上運行,​​並且我需要的是某個服務在一個遠程主機和其他遠程主機中的其他服務。

回答

4

對於需要部署到多個主機的單個docker-compose.yml,您需要使用獨立羣(不是較新的羣模式,但這種情況正在迅速變化)。將每個主機定義爲其羣的成員的swarm管理器,然後您可以在您的docker-compose.yml中使用約束來定義在哪些主機上運行哪些服務。

您還可以將docker-compose.yml分成幾個文件,每個主機一個文件,然後運行多個docker-compose up命令,併爲每個命令定義不同的DOCKER_HOST值。

在這兩種情況下,您都需要配置docker安裝以在網絡上偵聽,這應該通過在這些套接字上配置TLS來完成。 This documentation描述你需要爲此做些什麼。

1

您可以使用docker compose version 3,它可以在不使用多個撰寫文件的情況下執行多主機部署。您只需要爲集羣中的每個節點定義標籤,並使用placement約束的標籤名稱。

+0

但是,它需要創建一個羣簇或者我怎麼可以定義不同的主機標籤thems之間的已知 –

+0

要使用展示位置功能,您將需要使用羣? 。 – coolsvap

1

示例「dev-compose-deploy。陽明海運」的文件供大家參考 -

version: "3" 

services: 

    nginx: 
    image: nexus.example.com/pl/nginx-dev:latest 
    extra_hosts: 
     - "dev-pldocker-01:10.2.0.42」 
     - "int-pldocker-01:10.2.100.62」 
     - "prd-plwebassets-01:10.2.0.62」 
    ports: 
     - "80:8003" 
     - "443:443" 
    volumes: 
     - logs:/app/out/ 
    networks: 
     - pl 
    deploy: 
     replicas: 3 
     labels: 
     feature.description: 「Frontend」 
     update_config: 
     parallelism: 1 
     delay: 10s 
     restart_policy: 
     condition: any 
     placement: 
     constraints: [node.role == worker] 
    command: "/usr/sbin/nginx" 

    viz: 
    image: dockersamples/visualizer 
    ports: 
     - "8085:8080" 
    networks: 
     - pl 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock:ro 
    deploy: 
     replicas: 1 
     labels: 
     feature.description: "Visualizer" 
     restart_policy: 
     condition: any 
     placement: 
     constraints: [node.role == manager] 

networks: 
pl: 

volumes: 
logs: 
相關問題