从 EC2 实例中提取位于 ECS 存储库中的 Docker 镜像的最佳实践是什么?
我习惯利用ECS任务。要运行 Docker 容器 5 分钟,我需要转到
Auto-Scale
,将最小值设置为 1
,进入 ECS 页面,等待实例启动并运行我的任务。对我个人使用来说太烦人了。我想快速运行它并快速停止它。我想简单地运行我的 Docker 容器,但好吧,这是不可能的,然后我想创建一个 EC2 模板,该模板将直接在 EC2 实例中运行我的 Docker 容器。
User Data
中写不清楚)我认为我的需求是非常基本的,我找不到最好的方法来做到这一点。博客文章主要介绍如何在 Linux 上运行 Docker,而不是在 AWS 上运行的最佳方式。
最佳答案
这可以通过 EC2 实例角色和执行 docker 登录的脚本的组合来完成,后跟 docker pull
为您推送的图像。
先决条件:安装了 AWS CLI 和 Docker 的 EC2 实例。
首先,您必须添加内置 AmazonEC2ContainerRegistryReadOnly
您的 EC2 实例的 IAM 角色的 IAM 策略(这将授予对 所有 推送图像的读取访问权限)。如果您希望更加严格,可以改用以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantSingleImageReadOnlyAccess",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage"
],
"Resource": "<aws-account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>"
},
{
"Sid": "GrantECRAuthAccess",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
]
}
接下来,您必须创建一个脚本来为您执行登录和图像拉取。典型的脚本如下所示:
$(aws ecr get-login --no-include-email --region <region>);
docker pull <aws-account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>:<optional-tag>;
请注意,此脚本必须以 root 用户身份运行才能正确访问 Docker 守护程序。
Another way of solving this all together would be to look into automation options for ECS tasks.
关于amazon-web-services - 如何从 EC2 实例中提取 ECS docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53095803/