首页 > 解决方案 > 将运行中的 ECS 容器保存为新镜像并上传到 ECR

问题描述

我正在将 Apache、MySQL 和 memcached docker 容器从 AWS ECR 启动到 ECS 实例中。工程师可以四处浏览并根据需要进行更改。这些容器在设定的时间段后过期,但他们希望保存其数据库更改以供将来的容器使用。

我正在研究是否有一种解决方案,我可以使用 Lambda、aws-cli 或其他一些实用程序在容器终止之前自动执行此过程。

我正在寻找一种可以采用 mysql 容器并从中创建新图像的解决方案。我看到了这个问题,这主要是我想要的: 如何从亚马逊上正在运行的容器创建新的 docker 映像?

但是您必须docker commit从 ECS 实例运行,并从那里执行登录和推送。似乎没有办法将提交的图像推送到 ECR,而无需登录aws ecr get-login --no-include-email并运行 docker 的输出以获取令牌。

我遇到的问题是,如果我们有多个 ECS 实例正在运行,那么将很难知道工程师正在从哪里运行容器、SSH 到该服务器并运行docker commitdocker tagaws ecr logindocker push命令。对我来说,这似乎有点 hacky 并且容易出错。

我每小时重建 MySQL 容器并将其重新推送到 ECR,以便它们具有最新的内容更新。为了启动容器,我结合使用 ecs-cli 和 aws-cli 来使用 docker-compose.yml 文件在 ECS 中创建任务。

是否有一些功能我可以使用新名称/标签将正在运行的容器提交到 ECR?

我正在研究的另一个选项是使用持久存储 (EBS/EFS) 启动 MySQL 容器,但我仍在尝试查看这是否可行,因为我必须以某种方式标记持久存储,以便仅在工程师启动时使用它就这样。本质上,我将拥有一个特定于持久卷的唯一 docker-compose.yml 文件,它会启动一个带有新 mysql 数据的新容器,或者使用现有的容器(如果存在),并给定一个特定的名称。

标签: amazon-web-servicesdockeramazon-ecsamazon-ecr

解决方案


推荐阅读