1. 简介
Amazon Elastic Container Registry (ECR) 是 AWS 的 Docker 镜像仓库,使开发人员能够轻松存储、管理和部署 Docker 容器镜像。
定价:
没有预付费用或预先承诺。您只需为存储库中存储的数据量以及传输到 Internet 的数据量付费。Amazon ECR 包含每月 500MB 存储的免费套餐,为期一年。
**
2. 开始使用
2.1 创建 IAM 用户
- 创建一个管理员用户,并将该用户添加管理员组
- 通过 根用户 登录 AWS 账户,进入 IAM 控制台;
- 创建用户 Administrator 及密码;
- 设置权限:将用户添加到组;
- 创建组:Aministrators;
- 选择筛选策略:AWS managed-job function(AWS 托管的工作职能)以筛选表内容;
- 选择 AdministratorAccess 策略,然后创建组;
2.2 通过 AWS 控制台使用 ECR
2.2.1 创建镜像仓库
2.2.2 构建、标记和推送 Docker 映像
- 选择刚才创建的存储库,并选择 View push commands (查看推送命令) 以查看将映像推送到新存储库的步骤。
2.3 通过 AWS CLI 使用 ECR
- 安装 AWS CLI
安装 Docker
- 在 Amazon EC2 实例上安装 Docker
- 使用 Amazon Linux 2 AMI 启动实例。
- 连接到您的实例。
- 更新实例上已安装的程序包和程序包缓存
sudo yum update -y
。 - 安装最新的 Docker Community Edition 程序包
sudo amazon-linux-extras install docker
。 - 启动 Docker 服务
sudo service docker start
。 - 将 ec2-user 添加到 docker 组,以便您能够执行 Docker 命令,而无需使用 sudo
sudo usermod -a -G docker ec2-user
。 - 退出,再重新登录以接受新的 docker 组权限。您可以关闭当前的 SSH 终端窗口并在新终端窗口中重新连接到实例,完成这一过程。您的新 SSH 会话将具有相应的 docker 组权限。
- 验证 ec2-user 是否能在没有 sudo 的情况下运行 Docker 命令
docker info
。
- 在 Amazon EC2 实例上安装 Docker
向您的默认注册表验证身份
- 安装并配置 AWS CLI 后,向默认注册表验证 Docker CLI 的身份。这样一来,docker 命令可以通过 Amazon ECR 推送和拉取镜像。AWS CLI 提供
get-login-password
命令来简化身份验证过程。 - 要使用
get-login-password
针对 Amazon ECR 注册表验证 Docker,请运行aws ecr get-login-password
命令。将身份验证令牌传递给 docker login 命令时,将值 AWS 用作用户名,并指定要对其进行身份验证的 Amazon ECR 注册表 URI。如果对多个注册表进行身份验证,则必须针对每个注册表重复该命令。 - get-login-password (AWS CLI)
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
- Get-ECRLoginCommand (适用于 Windows PowerShell 的 AWS 工具)
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
- 安装并配置 AWS CLI 后,向默认注册表验证 Docker CLI 的身份。这样一来,docker 命令可以通过 Amazon ECR 推送和拉取镜像。AWS CLI 提供
创建存储库
- 现在您已拥有可推送到 Amazon ECR 的映像,还必须创建一个存储库来保存它。在本示例中,您创建一个名称为 hello-world 的存储库,稍后将推送 hello-world:latest 映像到这里。要创建存储库,请运行以下命令:
aws ecr create-repository \
--repository-name hello-world \
--image-scanning-configuration scanOnPush=true \
--region us-east-1
- 现在您已拥有可推送到 Amazon ECR 的映像,还必须创建一个存储库来保存它。在本示例中,您创建一个名称为 hello-world 的存储库,稍后将推送 hello-world:latest 映像到这里。要创建存储库,请运行以下命令:
推送映像到 Amazon ECR
- 现在您可以推送映像到上一部分中创建的 Amazon ECR 存储库。您使用 docker CLI 推送映像,但必须满足一些先决条件才能正常工作:
- 安装最低版本的 docker:1.7
- 已使用 docker login 配置 Amazon ECR 授权令牌。
- Amazon ECR 存储库存在且用户有向该存储库推送的权限。
docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
- 现在您可以推送映像到上一部分中创建的 Amazon ECR 存储库。您使用 docker CLI 推送映像,但必须满足一些先决条件才能正常工作:
从 Amazon ECR 拉取映像
- 在推送映像到 Amazon ECR 存储库后,可以从其他位置拉取该映像。可使用 docker CLI 拉取映像,但必须满足以下几个先决条件才能正常使用:
- 安装最低版本的 docker:1.7
- 已使用 docker login 配置 Amazon ECR 授权令牌。
- Amazon ECR 存储库存在且用户有从该存储库拉取的权限。
docker pull aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
- 在推送映像到 Amazon ECR 存储库后,可以从其他位置拉取该映像。可使用 docker CLI 拉取映像,但必须满足以下几个先决条件才能正常使用:
删除映像
- 如果您不再需要一个存储库中的某个映像,则可以使用 batch-delete-image 命令将其删除。要删除映像,您必须指定它所在的存储库,并指定映像的 imageTag 或 imageDigest 值。以下示例删除 hello-world 存储库中映像标签为 latest 的映像。
aws ecr batch-delete-image --repository-name hello-world --image-ids imageTag=latest
- 如果您不再需要一个存储库中的某个映像,则可以使用 batch-delete-image 命令将其删除。要删除映像,您必须指定它所在的存储库,并指定映像的 imageTag 或 imageDigest 值。以下示例删除 hello-world 存储库中映像标签为 latest 的映像。
删除存储库
- 如果您不再需要整个存储库中的所有映像,您可以删除存储库。默认情况下,您不能删除包含映像的存储库;但是,—force 标记允许此操作。要删除包含映像的存储库(及其中的所有映像),请运行以下命令。
aws ecr delete-repository --repository-name hello-world --force
- 如果您不再需要整个存储库中的所有映像,您可以删除存储库。默认情况下,您不能删除包含映像的存储库;但是,—force 标记允许此操作。要删除包含映像的存储库(及其中的所有映像),请运行以下命令。