簡體   English   中英

在 AWS ECS 上使用 docker-compose 進行 Continuos 部署的最佳實踐

[英]Best practics working docker-compose on AWS ECS for Continuos Deploy

我是 ECS 的新手,我對如何使用具有多種服務的docker-compose文件自動在 AWS ECS Fargate 中進行部署有些困惑。

我能夠通過以下步驟執行從 git 推送到部署單個容器的端到端:

  1. 創建 AWS ECR
  2. 標記 docker 圖像
  3. 創建 CodeCommit
  4. 創建 CodeBuild
  5. 創建代碼部署
  6. 使用任務描述創建集群
  7. 創建管道以加入之前的所有內容並自動化直到結束。
  8. 完畢

但是當您擁有多項服務時會發生什么?

  1. 我是否必須修改docker-compose文件才能與 ECS 兼容? 如果是這樣,如果整個項目都在一個文件夾中(pydanny cookiecutter 結構),我該如何分離存儲庫?
  2. 我是否必須為我的docker-compose的每個服務創建一個 ECR 存儲庫?
  3. 自動化每個 ECR 的標簽和推送以及其各自的部署以實現完整的端到端流程的步驟是什么?
  4. 如何修改docker-compose的卷以在 ECS 上工作?

我使用以下由 pydanny cookiecutter 生成的docker-compose文件,它有 7 個服務:

Django + Postgres + Redis + Celery + Celeryworker + Celerybeat + Flower

docker-compose.yml

version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: test_cd_django
    depends_on:
      - postgres
    volumes:
      - .:/app
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: test_cd_postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data
      - local_postgres_data_backups:/backups
    env_file:
      - ./.envs/.local/.postgres

  redis:
    image: redis:3.2

  celeryworker:
    <<: *django
    image: test_cd_celeryworker
    depends_on:
      - redis
      - postgres

    ports: []
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: test_cd_celerybeat
    depends_on:
      - redis
      - postgres

    ports: []
    command: /start-celerybeat

  flower:
    <<: *django
    image: test_cd_flower
    ports:
      - "5555:5555"
    command: /start-flower

非常感謝您的幫助。

這取決於您是否要使用 docker-compose 來執行所有操作。 如果要使用 docker-compose 構建、推送和拉取,則需要使 docker-compose.yml 中的image塊與 ECR 地址匹配。 例如

image: ${ID}.dkr.ecr.${region}.amazonaws.com/${image_name}:${image_tag:-latest}

我是否必須為我的 docker-compose 的每個服務創建一個 ECR 存儲庫?

您不必為每個服務創建一個 ECR 存儲庫,而是為您構建的每個映像創建一個 ECR 存儲庫。 在您的情況下,您不必為redis創建存儲庫,但您必須為 django 和 postgres 執行此操作,因為您正在使用 Dockerfile 構建它們。 celeryworker 和 celerybeat 使用 django 映像啟動,因此您無需為它們創建額外的存儲庫。

自動化每個 ECR 的標簽和推送以及其各自的部署以實現完整的端到端流程的步驟是什么?

在這里我只能提供一些建議,這完全取決於您的設置。 我傾向於盡可能地保持與雲服務無關。 您可以在docker-compose.yml中定義如下圖像:

services:
  postgres:
    image: ${ID}.dkr.ecr.${region}.amazonaws.com/my_postgres:${image_tag:-latest}
  django:
    image: <theID>.dkr.ecr.<theRegion>.amazonaws.com/my_django:${image_tag:-latest}

然后在構建過程中簡單地准備一個.env文件,其中包含您需要的信息。 例如

image_tag=1.2.0

如何修改 docker-compose 的卷以在 ECS 上工作?

不幸的是,我無法回答這個問題,我找到了以下答案: https://devops.stackexchange.com/questions/6228/using-volumes-on-aws-fargate

暫無
暫無

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

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