amazon-web-services - 仅从使用 Docker Compose 部署的 AWS 实例更新一个容器
问题描述
我使用 Docker compose 将 Postgres + Backend + Prisma 实例部署到 Amazon ECS。我有一个关于在不重新部署/删除整个实例的情况下更新图像的问题。
我的图像位于 Amazon ECR - 如果我在 Amazon ECR 端更新图像,是否会更新我的实例?相同的链接仍将用于引用我的图像,所以我想知道是否是这种情况。如果没有,我是否可以只刷新实例上的一个容器?我在下面附上了我的 docker-compose.yml 文件。
version: '3.4'
services:
db:
container_name: db
ports:
- 5432:5432
image: postgres:latest
environment:
- POSTGRES_USER=[user]
- POSTGRES_PASSWORD=[password]
volumes:
- my-vol:/var/lib/postgresql/data/2
backend:
depends_on:
- db
container_name: backend
ports:
- 4000:4000
image: [backend image name]
prisma:
depends_on:
- db
container_name: prisma
ports:
- 5555:5555
image: [prisma image name]
environment:
NODE_ENV: production
volumes:
my-vol:
解决方案
很高兴你在这方面取得了进展。
仅仅更新 ECR 上的图像不会有太大作用,因为 ECS 服务不会轮询新图像。在本机 ECS 中,如果您强制重新部署按原样配置的服务,并且如果您更新容器镜像保持不变name:tag
,那么它将使用新镜像重新部署任务。我不知道是否有办法通过 compose 强制重新部署,或者您是否需要以强制重新部署任务的方式调整/欺骗配置。
实现这一点的一种方法是创建一个管道(使用您方便的工具)来监控 ECR 中的更新,并且如果上传了新图像,它将触发服务重新部署。
实现这一点的更好方法是创建一个管道(使用您方便的工具),它执行相同但使用不同的标签。始终为您的部署使用相同的标签并不是最佳实践,因为您永远不知道在任何时间点实际部署了什么。
我们写了一篇博客文章,涵盖了其中一些场景(包括能够构建容器)。如果您已经这样做了,那么博客中的示例不应由新的 GH 提交触发,而是由被推送到 ECR 的新图像触发。
HTH。
推荐阅读
- python - 如何禁用 discord.py 记录器?
- xamarin.forms - Xamarin.Forms 中的正确 Page.Loaded 事件
- python - Elasticsearch 父子映射和索引
- c - CS50 Luhn's Algorithm in C. 非常感谢帮助:)
- javascript - 使用 javascript 显示 Youtube 缩略图
- java - 将数组转换为数组索引到值的映射
- loops - Arduino循环随机时间
- python - 将 pandas 系列以 '_' 分隔的字符串拆分为可变数量的字段,填充缺失的字段
- excel - 如何从变量 VBA 获取单元格地址
- flask - Flask WTF form with FormFields - multiple csrf tokens