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 创建镜像仓库

image.png

2.2.2 构建、标记和推送 Docker 映像

  • 选择刚才创建的存储库,并选择 View push commands (查看推送命令) 以查看将映像推送到新存储库的步骤。

image.png

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
  • 向您的默认注册表验证身份

    • 安装并配置 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
  • 创建存储库

    • 现在您已拥有可推送到 Amazon ECR 的映像,还必须创建一个存储库来保存它。在本示例中,您创建一个名称为 hello-world 的存储库,稍后将推送 hello-world:latest 映像到这里。要创建存储库,请运行以下命令:
      1. aws ecr create-repository \
      2. --repository-name hello-world \
      3. --image-scanning-configuration scanOnPush=true \
      4. --region us-east-1
  • 推送映像到 Amazon ECR

    • 现在您可以推送映像到上一部分中创建的 Amazon ECR 存储库。您使用 docker CLI 推送映像,但必须满足一些先决条件才能正常工作:
      • 安装最低版本的 docker:1.7
      • 已使用 docker login 配置 Amazon ECR 授权令牌。
      • Amazon ECR 存储库存在且用户有向该存储库推送的权限。
        1. docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  • 从 Amazon ECR 拉取映像

    • 在推送映像到 Amazon ECR 存储库后,可以从其他位置拉取该映像。可使用 docker CLI 拉取映像,但必须满足以下几个先决条件才能正常使用:
      • 安装最低版本的 docker:1.7
      • 已使用 docker login 配置 Amazon ECR 授权令牌。
      • Amazon ECR 存储库存在且用户有从该存储库拉取的权限。
        1. docker pull aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  • 删除映像

    • 如果您不再需要一个存储库中的某个映像,则可以使用 batch-delete-image 命令将其删除。要删除映像,您必须指定它所在的存储库,并指定映像的 imageTag 或 imageDigest 值。以下示例删除 hello-world 存储库中映像标签为 latest 的映像。
      1. aws ecr batch-delete-image --repository-name hello-world --image-ids imageTag=latest
  • 删除存储库

    • 如果您不再需要整个存储库中的所有映像,您可以删除存储库。默认情况下,您不能删除包含映像的存储库;但是,—force 标记允许此操作。要删除包含映像的存储库(及其中的所有映像),请运行以下命令。
      1. aws ecr delete-repository --repository-name hello-world --force