簡體   English   中英

如何動態更改 docker-compose 圖像字段

[英]How to dynamically change the docker-compose image field

我有一個類似下面的 docker-compose.yml:

networks:
  smstake: 
    ipam:
      config:
        - subnet: 10.0.10.0/24
services:
    app:

        image: smstake:latest
        ports:
          - 8000:80
        networks:
          - smstake

        depends_on:
          - db
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager

我正在使用它在以 swarm 模式運行的節點中部署服務。

每次構建圖像​​時,圖像名稱可能會根據用戶傳遞的分支名稱或用作圖像標記的標記名而有所不同。 我從詹金斯那里運行它。 例如: smstake:

如何將圖像名稱動態添加到服務的圖像參數中。 由於 docker stack 不支持構建。 我什至不能使用它。 我無法找出正確的方法來做到這一點。

我正在嘗試使用docker stack deploy -c docker-compose.yml stackname進行部署

我的確切要求是:

  1. 在 jenkins 有一個構建工作,它為我們構建圖像。
  2. 如果標簽或分支名稱更改,則圖像名稱不同或更改
  3. 我們有一個構建作業,可以使用新創建的映像再次部署這些作業。

為新標簽創建新映像的原因是我可以回滾到以前構建的映像。

一些編輯:添加圖像名稱以添加到 configuration.env 文件中,該文件將在部署命令運行之前使用部署作業中的 echo 命令傳遞。 比 docker-compose 看起來像下面

version: '3.4'
networks:
  smstake: 

services:

    db:
        image: mysql:5.7
        networks:
          - smstake
        ports:
          - "3306"
        env_file:
          - configuration.env
        environment:
          MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
          MYSQL_DATABASE: ${DB_NAME}
          MYSQL_USER: ${DB_USER}
          MYSQL_PASSWORD: ${DB_PASSWORD}
        volumes:
          - mysql_data:/var/lib/mysql
        deploy:
          mode: replicated
          replicas: 1

    app:
        env_file:
          - configuration.env
        image: ${SMSTAKE_VERSION}
        ports:
          - 8000:80
        networks:
          - smstake
        depends_on:
          - db
        deploy:
          mode: replicated
          replicas: 1
          placement:
            constraints:
              - node.role == manager
volumes:
    mysql_data:

為什么它沒有從 configuration.env 文件中讀取,我已經確認在那里設置了該鍵的正確值。 錯誤信息

創建服務 smstake_app 未能創建服務 smstake_app:來自守護進程的錯誤響應:rpc 錯誤:代碼 = InvalidArgument desc = ContainerSpec:必須提供圖像參考構建步驟“執行外殼”標記構建為失敗已完成:失敗

在 docker-compose 文件中,您可以根據環境變量進行變量替換。 這記錄在變量替換下。

您可以使用以下內容為圖像指定不同的版本:

image: smstake:${SMSTAKE_VERSION}

在部署的 jenkins 作業中,您可以設置此環境變量並運行 docker stack 命令:

SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname

您需要分兩個階段進行

docker-compose config | docker stack deploy -c - stackname

您需要使用docker-compose而不是docker compose V2,因為docker stack不支持無version的清單(至少在撰寫本文時尚未發布的 21.xx 版本之前不支持)

您還可以獲得使用.env文件來讀取您的環境的額外好處,這也使開發人員也很容易。

暫無
暫無

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

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