簡體   English   中英

Swarm 上的多主機 Docker 組合應用程序

[英]Multi-host Docker compose application on Swarm

我有一個簡單的撰寫文件,其中有三個服務 A、B 和 C。A 和 B 都依賴於 C(即有到 C 的links )。 這是docker-compose.yml的簡化摘錄:

kafka:
  image: spotify/kafka
  environment:
    ADVERTISED_PORT: 9092
  ports:
    - "2181:2181"
    - "9092:9092"
ServiceA:
  image: elsoufy/myimage
  command: ./mycommand -role producer -queue kafka:9092
  ports:
    - "8080"
ServiceB:
  image: elsoufy/myimage
  command: ./mycommand -role consumer -queue kafka:9092

我已經在 AWS 上設置了一個 Docker 群,並通過 consul 密鑰庫啟用了覆蓋網絡。 我一直在努力讓它正常工作(我不得不手動將機器的內核升級到linux 3.16 )。

我正在使用 Docker 1.9

Client:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   76d6bc9
 Built:        Tue Nov  3 19:20:09 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   76d6bc9
 Built:        Tue Nov  3 19:20:09 UTC 2015
 OS/Arch:      linux/amd64

我可以使用docker-compose up -d成功啟動組合,但是ServiceAServiceB在多次嘗試連接到kafka后崩潰,因為他們找不到它。 當我嘗試使用顯式links並為此應用啟用覆蓋時, 出現錯誤

docker-compose --x-networking --x-network-driver=overlay up

links, which are not compatible with Docker networking and will be ignored. Future versions of Docker will not support links - you should remove them for forwards-compatibility.

當我想啟用多主機時,我似乎無法使用links !! 但是,我如何運行一個組合應用程序,其中我在容器之間具有依賴關系並在 docker swarm 上擴展容器?

您不再需要顯式鏈接。 網絡應該鏈接同一個用戶定義網絡上的所有容器。 Compose 根據項目名稱為您創建一個默認網絡。

要表達容器或服務之間的依賴關系,您可以使用depends_on docker-compose.yml文件中的配置選項depends_on ,但使用version 2文件格式。

所以你的 docker-compose.yml 文件應該看起來像這樣:

version: '2'
services:
    kafka:
      image: spotify/kafka
      environment:
        ADVERTISED_PORT: 9092
      ports:
        - "2181:2181"
        - "9092:9092"

    ServiceA:
      image: elsoufy/myimage
      command: ./mycommand -role producer -queue kafka:9092
      ports:
        - "8080"
      depends_on:
        - kafka    

    ServiceB:
      image: elsoufy/myimage
      command: ./mycommand -role consumer -queue kafka:9092
      depends_on:
        - kafka     

networks:
      ...

docker-compose up將按依賴順序啟動服務。 在上面的例子中, kafka將在ServiceAServiceB之前啟動。

注意:如果您使用version 1文件格式和links ,您的應用程序將可以工作,但Swarm會將所有容器安排在一台主機上,因為容器之間的links不能跨主機使用舊網絡系統。

暫無
暫無

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

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