首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳实践工作码头-为连续部署的AWS ECS组合

最佳实践工作码头-为连续部署的AWS ECS组合
EN

Stack Overflow用户
提问于 2019-10-09 13:59:51
回答 1查看 2.8K关注 0票数 4

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

通过以下步骤,我能够执行从git推送到部署单个容器的端到端的操作:

  1. 创建AWS ECR
  2. 标记码头图像
  3. 创建CodeCommit
  4. 创建CodeBuild
  5. 创建CodeDeploy
  6. 创建具有任务描述的群集
  7. 创建管道连接之前的一切,并自动结束。
  8. 完成

,但是当您有多个服务时会发生什么呢?

  1. 我是否必须修改docker-compose文件以与ECS兼容?如果是这样的话,如果整个项目都在一个文件夹中(pydanny炊具结构),我如何分离存储库?
  2. 是否必须为我的docker-compose的每个服务创建一个ECR存储库?
  3. 有哪些步骤可以使每个ECR的标记和推送自动化,然后实现其各自的部署以实现完整的端到端过程?
  4. 如何修改docker-compose的卷以处理ECS?

我使用由皮丹尼炊具生成的以下docker-组合文件,它有7个服务:

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

docker-compose.yml

代码语言:javascript
复制
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

非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-10-09 14:08:55

这取决于您是否想使用您的坞-撰写来执行所有的操作。如果您想要构建、推送和拉出使用您的对接器-撰写,您将需要在对接-复合的image块匹配的ECR地址。例如:

代码语言:javascript
复制
image: ${ID}.dkr.ecr.${region}.amazonaws.com/${image_name}:${image_tag:-latest}

我是否必须为我的对接者撰写的每个服务创建一个ECR存储库?

您不必为每个服务创建一个ECR存储库,而是为您构建的每个映像创建一个ECR存储库。在您的示例中,您不必为redis创建回购,但是您必须为django和postgres创建回购,因为您正在使用您的Dockerfile构建它们。celeryworker和celery节拍正在使用django映像来启动,所以您不需要为它们创建额外的回购。

有哪些步骤可以使每个ECR的标记和推送自动化,然后实现其各自的部署以实现完整的端到端过程?

在这里,我只能提供一些建议,这都取决于你的设置。我倾向于尽可能保持云服务不可知论的身份。您可以将docker-compose.yml中的图像定义为:

代码语言:javascript
复制
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文件。例如:

代码语言:javascript
复制
image_tag=1.2.0

如何修改坞-撰写的卷,以工作在ECS上?

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58305899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档