gpt4 book ai didi

amazon-web-services - 在 AWS ECS 上使用 docker-compose 进行持续部署的最佳实践

转载 作者:行者123 更新时间:2023-12-04 08:07:39 25 4
gpt4 key购买 nike

我是 ECS 的新手,我对如何使用 docker-compose 自动在 AWS ECS Fargate 中进行部署有些困惑。文件与多个服务。

我能够执行从 git push 到部署 的端到端。单箱 ,通过以下步骤:

  • 创建 AWS ECR
  • 标记 docker 镜像
  • 创建代码提交
  • 创建 CodeBuild
  • 创建 CodeDeploy
  • 创建具有任务描述的集群
  • 创建管道以加入之前的所有内容并自动化直到结束。
  • 完成

  • 但是当你有多个服务时会发生什么?
  • 我是否必须修改docker-compose文件与ECS兼容?如果是这样,如果整个项目都在一个文件夹中(pydanny cookiecutter 结构),我该如何分离存储库?
  • 我是否必须为我的 docker-compose 的每个服务创建一个 ECR 存储库? ?
  • 自动标记和推送每个 ECR 然后各自部署以实现完整的端到端流程的步骤是什么?
  • 如何修改 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 构建、推送和拉取,您需要拥有 image docker-compose.yml 中与 ECR 地址匹配的块。
    例如

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

    Do I have to create an ECR repository for each service of my docker-compose?



    您不必为每个服务创建 ECR 存储库,而是为您构建的每个镜像创建一个 ECR 存储库。在您的情况下,您不必为 redis 创建一个存储库。但是你必须为 django 和 postgres 做这件事,因为你是用你的 Dockerfiles 构建它们的。 celeryworker 和 celerybeat 使用 django 镜像启动,因此您无需为它们创建额外的存储库。

    What are the steps to automate the tag and push of each ECR and then its respective deploy to achieve the complete End-to-End process?



    在这里我只能提供一些建议,这一切都取决于您的设置。我倾向于尽可能保持云服务不可知论。
    您可以在 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

    How can I modify the volumes of the docker-compose to work on ECS?



    不幸的是,我无法回答这个问题,我找到了以下答案:
    https://devops.stackexchange.com/questions/6228/using-volumes-on-aws-fargate

    关于amazon-web-services - 在 AWS ECS 上使用 docker-compose 进行持续部署的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58305899/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com