Amazon ECR
用户指南 (API Version 2015-09-21)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

在 Amazon ECR 中使用 AWS CLI

以下步骤将帮助您安装 AWS CLI,然后登录 Amazon ECR 创建一个映像存储库,将映像推送到该存储库,并通过 AWS CLI 执行 Amazon ECR 中的其他常见情景。

AWS 命令行界面 (CLI) 是用于管理 AWS 服务的统一工具。只通过一个工具进行下载和配置,您就可以使用命令行控制多个 AWS 服务并利用脚本来自动执行这些服务。有关的 AWS CLI 的更多信息,请参阅 http://www.amazonaws.cn/cli/

有关可用于管理 AWS 资源的其他工具的更多信息,包括不同的 AWS SDK、IDE 工具包、Windows PowerShell 命令行工具,请参阅 http://www.amazonaws.cn/tools/

步骤 1:向您的默认注册表验证 Docker 身份

在安装并配置 AWS CLI 后,您可以向默认注册表验证 Docker CLI 身份,以便 docker 命令可以通过 Amazon ECR 推送和拉取映像。AWS CLI 提供 get-login 命令来简化身份验证过程。

使用 get-login 对 Amazon ECR 注册表验证 Docker

注意

AWS CLI 从版本 1.9.15 开始提供 get-login 命令;但对于较新的 Docker 版本 (17.06 或更高版本),我们建议使用 1.11.91 或更高版本。您可以使用 aws --version 命令查看 AWS CLI 的版本。

  1. 运行 aws ecr get-login 命令。以下示例适用于与创建请求的账户关联的默认注册表。要访问其他账户注册表,请使用 --registry-ids aws_account_id 选项。如果您使用的是 Docker 17.06 或更高版本,请在 get-login 后包含 --no-include-email 选项。有关更多信息,请参阅 AWS Command Line Interface Reference 中的 get-login

    aws ecr get-login

    输出:

    docker login -u AWS -p password -e none https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com

    重要

    如果收到 Unknown options: --no-include-email 错误,请安装最新版本的 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS 命令行界面

    结果输出是 docker login 命令,此命令可用于对 Amazon ECR 注册表验证 Docker 客户端。

  2. docker login 命令复制并粘贴到终端,授权您的 Docker CLI 访问注册表。此命令提供一个授权令牌,此令牌在 12 小时内对指定注册表有效。

    注意

    如果使用的是 Windows PowerShell,复制并粘贴这样的长字符串将不起作用。请使用以下命令。如果您使用的是 Docker 17.06 或更高版本,请在 get-login 后包含 --no-include-email 选项。

    Invoke-Expression -Command (aws ecr get-login)

    重要

    在执行此 docker login 命令时,进程列表 (ps -e) 显示中将为系统上的其他用户显示命令字符串。由于 docker login 命令包含验证凭证,因此系统上的其他用户可按此方式查看凭证并使用这些凭证来获取对存储库的推送和拉取访问权会带来风险。如果您所在的系统不安全,则应考虑此风险,并通过省略 -p password 选项并在系统提示时输入密码来以交互方式登录。

步骤 2:获取 Docker 映像

您需要有一个映像才能将映像推送到 Amazon ECR。如果您还没有可使用的映像,可以按照 Docker 基本知识 中所述的步骤创建一个,也可以从 Docker Hub 中拉取一个想保存在 Amazon ECR 注册表中的映像。要将 ubuntu:trusty 映像从 Docker Hub 拉取到本地系统,请运行以下命令:

$ docker pull ubuntu:trusty trusty: Pulling from library/ubuntu 0a85502c06c9: Pull complete 0998bf8fb9e9: Pull complete a6785352b25c: Pull complete e9ae3c220b23: Pull complete Digest: sha256:3cb273da02362a6e667b54f6cf907edd5255c706f9de279c97cfccc7c6988124 Status: Downloaded newer image for ubuntu:trusty

步骤 3:创建存储库

现在您已拥有可推送到 Amazon ECR 的映像,您还需要创建一个存储库来保存它。在本示例中,您创建一个名称为 ubuntu 的存储库,稍后将推送 ubuntu:trusty 映像到这里。要创建存储库,请运行以下命令:

$ aws ecr create-repository --repository-name ubuntu { "repository": { "registryId": "111122223333", "repositoryName": "ubuntu", "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/ubuntu" } }

步骤 4:推送映像到 Amazon ECR

现在您可以推送映像到上一部分中创建的 Amazon ECR 存储库。您使用 docker CLI 推送映像,但必须满足一些先决条件才能正常工作:

  • 安装最低版本 docker:1.7

  • Amazon ECR 授权令牌已配置为 docker login

  • Amazon ECR 存储库存在且用户有向该存储库推送的权限。

在满足这些先决条件后,即可将映像推送到您在帐户的默认注册表中新创建的存储库中。

标记映像并推送到 Amazon ECR

  1. 列出您存储在本地的映像,以识别要标记和推送的映像。

    $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu trusty e9ae3c220b23 3 weeks ago 187.9 MB
  2. 标记映像并推送到存储库。

    $ docker tag ubuntu:trusty aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu:trusty
  3. 推送映像。

    $ docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu:trusty The push refers to a repository [aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu] (len: 1) e9ae3c220b23: Pushed a6785352b25c: Pushed 0998bf8fb9e9: Pushed 0a85502c06c9: Pushed trusty: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774

步骤 5:从 Amazon ECR 拉取映像

在推送映像到 Amazon ECR 存储库后,可以从其他位置拉取该映像。我们将使用 docker CLI 拉取映像,但必须满足一些先决条件才能正常工作:

  • 安装最低版本 docker:1.7

  • Amazon ECR 授权令牌已配置为 docker login

  • Amazon ECR 存储库存在且用户有从该存储库拉取的权限。

在满足这些先决条件后,即可拉取您的映像。要从 Amazon ECR 拉取示例映像,请运行以下命令:

$ docker pull aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu:trusty trusty: Pulling from ubuntu 0a85502c06c9: Pull complete 0998bf8fb9e9: Pull complete a6785352b25c: Pull complete e9ae3c220b23: Pull complete Digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b Status: Downloaded newer image for aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu:trusty

步骤 6:删除映像

如果您不再需要一个存储库中的某个映像,则可以使用 batch-delete-image 命令将其删除。要删除映像,您必须指定它所在的存储库,并指定映像的 imageTagimageDigest 值。以下示例删除 ubuntu 存储库中映像标签为 trusty 的映像。

$ aws ecr batch-delete-image --repository-name ubuntu --image-ids imageTag=trusty { "failures": [], "imageIds": [ { "imageTag": "trusty", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }

步骤 7:删除存储库

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

$ aws ecr delete-repository --repository-name ubuntu --force { "repository": { "registryId": "aws_account_id", "repositoryName": "ubuntu", "repositoryArn": "arn:aws:ecr:us-east-1:aws_account_id:repository/ubuntu", "createdAt": 1457671643.0, "repositoryUri": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/ubuntu" } }