本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon Elastic Container Registry
您可以在 VS Code 中直接从 AWS Explorer 访问亚马逊弹性容器注册表 (Amazon ECR) Registry 服务,然后使用它将程序映像推送到亚马逊 ECR 存储库。要开始使用,您需要执行以下步骤:
- 
      创建一个 Dockerfile,其中包含构建映像所需的信息。 
- 
      从该 Dockerfile 生成映像并标记该映像以供处理。 
- 
      在 Amazon ECR 实例内创建一个存储库。 
- 
      将标记的映像推送到此存储库。 
先决条件
要通过 VS Code Explorer 中访问 Amazon ECR 服务,您需要完成下面这些步骤。
在访问某项 AWS 服务(例如 Amazon ECR)之前,您必须提供凭证。这样,相应服务便可以确定您是否有权访问其资源。我们不建议您 AWS 直接通过根 AWS 账户的证书进行访问。而是使用 AWS Identity and Access Management (IAM) 创建 IAM 用户,然后将该用户添加到具有管理权限的 IAM 群组。然后,您可以使用特殊的 URL 和 IAM 用户的证书进行访问 AWS 。
如果您已注册 AWS 但没有为自己创建 IAM 用户,则可以使用 IAM 控制台创建一个。
要创建管理员用户,请选择以下选项之一。
| 选择一种方法来管理您的管理员 | 目的 | 方式 | 您也可以 | 
|---|---|---|---|
| 在 IAM Identity Center 中 (建议) | 使用短期凭证访问 AWS。 这符合安全最佳实操。有关最佳实践的信息,请参阅《IAM 用户指南》中的 IAM 中的安全最佳实践。 | 有关说明,请参阅《AWS IAM Identity Center 用户指南》中的入门。 | 通过在《AWS Command Line Interface 用户指南》 AWS IAM Identity Center中配置 AWS CLI 要使用的来配置编程访问权限。 | 
| 在 IAM 中 (不推荐使用) | 使用长期凭证访问 AWS。 | 按照《IAM 用户指南》中的创建用于紧急访问的 IAM 用户中的说明进行操作。 | 按照《IAM 用户指南》中的管理 IAM 用户的访问密钥,配置编程式访问。 | 
要以此新 IAM 用户的身份登录,请退出 AWS 控制台,然后使用以下 URL。在以下 URL 中,y our_aws_account_id 是没有连字符的 AWS 账号(例如,如果您的 AWS 账号是,则您的账户 ID 是):1234-5678-9012 AWS 123456789012
https://your_aws_account_id.signin.aws.amazon.com/console/
输入您刚创建的 IAM 用户名和密码。登录后,导航栏显示“your_user_name @ your_aws_account_id”。
如果您不希望登录页面的 URL 包含您的 AWS 账户 ID,则可以创建账户别名。从 IAM 控制面板中,选择自定义,然后输入账户别名。账户别名可以是您的公司名称。有关更多信息,请参阅 IAM 用户指南中的您的 AWS 账户 ID 及其别名。
要在创建账户别名后登录,请使用以下 URL:
https://your_account_alias.signin.aws.amazon.com/console/
要为您的账户验证 IAM 用户的登录链接,请打开 IAM 控制台并在控制面板的 IAM 用户登录链接下进行检查。
有关 IAM 的更多信息,请参阅 AWS Identity and Access Management 用户指南。
您可以通过从安装 Docker 引擎
通过从安装、更新和卸载 AWS CLI 版本 2 用户指南中选择您的首选操作系统来安装和配置 AWS CLI 版本 2。
1. 创建 Dockerfile
Docker 使用名为“Dockerfil”的文件来定义可以推送和存储在远程存储库中的映像。您必须先创建 Dockerfile,然后通过该 Dockerfile 构建映像,然后才能将映像上传到 ECR 存储库。
创建 Dockerfile
- 
        使用 Toolkit for VS Code 资源管理器导航至要将 Dockerfile 存储到的目录。 
- 
        创建一个名为 Dockerfile 的新文件。 注意VS Code 可能会提示您选择文件类型或文件扩展名。如果出现该提示,请选择纯文本。Vs Code 具有“dockerfile”扩展名。但是,我们建议您不要使用它。这是因为该扩展名可能会导致与某些版本的 Docker 或其他关联应用程序发生冲突。 
使用 VS Code 编辑 Dockerfile
如果 Dockerfile 具有文件扩展名,请打开该文件的上下文(右键单击)菜单,然后移除文件扩展名。
从 Dockerfile 中删除文件扩展名后:
- 
        直接在 VS Code 中打开空的 Dockerfile。 
- 
        将以下示例的内容复制到您的 Dockerfile 中: 例 Dockerfile 映像模板FROM ubuntu:18.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh这是使用 Ubuntu 18.04 映像的 Dockerfile。RUN 指令将更新软件包缓存。安装一些适用于 Web 服务器的软件包,然后将“Hello World!” 内容写入到 Web 服务器的文档根目录。EXPOSE 指令在容器上公开端口 80,而 CMD 指令启动 Web 服务器。 
- 
        保存您的 Dockerfile。 重要确保您的 Dockerfile 名称上没有附加扩展名。带有扩展名的 Dockerfile 可能会导致与某些版本的 Docker 或其他关联应用程序发生冲突。 
2. 通过 Dockerfile 构建映像
您创建的 Dockerfile 包含为程序构建映像所需的信息。您必须先构建映像,然后才能将该映像推送到 Amazon ECR 实例。
通过 Dockerfile 构建映像
- 
        要导航到包含您的 Dockerfile 的目录,请使用 Docker CLI 或与您的 Docker 实例集成的 CLI。 
- 
        要构建在 Dockerfile 中定义的映像,请运行 Docker build 命令。 docker build -t hello-world .
- 
        要验证是否已正确创建映像,请运行 Docker images 命令。 docker images --filter reference=hello-world例 输出示例:REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
- 
        注意创建或推送映像无需执行此步骤,但是您可以看到程序映像在运行时的工作情况。 要运行新构建的映像,请使用 Docker run 命令。 docker run -t -i -p 80:80 hello-world前面示例中指定的 -p 选项将容器上暴露的端口 80 映射到主机系统的端口 80。如果您正在本地运行 Docker,可使用 Web 浏览器导航至 http://localhost:80 。如果程序运行正常,系统将显示 “Hello World!”语句。 有关 Docker run 命令的更多信息,请参阅 Docker 网站上的 Docker Run 参考 。 
3. 创建新存储库
要将您的映像上载到您的 Amazon ECR 实例,请创建一个新的存储库来存储它。
创建新的 Amazon ECR 存储库
- 
        从 VS Code 活动栏中,选择 AWS Toolkit 图标。 
- 
        展开 “ AWS 资源管理器” 菜单。 
- 
        找到与您的 AWS 账户关联的默认 AWS 区域。然后,选择它以查看通过 Toolkit for VS Cod 提供的服务列表。 
- 
        选择 ECR + 选项以开始创建新存储库流程。 
- 
        要完成该流程,请按照提示操作。 
- 
        完成后,您可以从 AWS 资源管理器菜单的 ECR 部分访问您的新存储库。 
4. 推送、拉取和删除映像
从 Dockerfile 构建映像并创建存储库后,您可以将映像推送到 Amazon ECR 存储库中。此外,使用带有 Docker 和 AWS CLI 的 AWS 资源管理器可以执行以下操作:
- 
        从存储库中提取映像。 
- 
        删除存储在存储库中的映像。 
- 
        删除存储库。 
使用默认存储库对 Docker 进行身份验证
在 Amazon ECR 实例和 Docker 实例之间交换数据要求进行身份验证。使用注册表对 Docker 进行身份验证:
- 
        打开连接到您的 AWS CLI 实例的命令行操作系统。 
- 
        使用该get-login-password方法向您的私有 ECR 注册表进行身份验证。 aws ecr get-login-password --regionregion| docker login --username AWS --password-stdinAWS_account_id.dkr.ecr.region.amazonaws.com重要在上述命令中,您必须将 region和AWS_account_id更新为您的 AWS 账户的特定信息。
标记映像并将其推送到存储库
使用您的实例对 Docker 进行身份验证后 AWS,将映像推送到您的存储库。
- 
        使用 Docker images 命令查看您在本地存储的映像,并识别要标记的映像。 docker images例 输出示例:REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
- 
        使用 Docker tag 命令标记映像。 docker tag hello-world:latestAWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
- 
        使用 Docker tag 命令将标记的映像推送到您的存储库。 docker pushAWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest例 输出示例:The push refers to a repository [AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world] (len: 1) e9ae3c220b23: Pushed a6785352b25c: Pushed 0998bf8fb9e9: Pushed 0a85502c06c9: Pushed latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774
将带标签的图像成功上传到存储库后,它就会显示在 AWS 资源管理器菜单中。
从 Amazon ECR 拉取映像
- 
        您可以将映像拉取到您的 Docker tag 命令的本地实例。 docker pullAWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest例 输出示例:The push refers to a repository [AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world] (len: 1) e9ae3c220b23: Pushed a6785352b25c: Pushed 0998bf8fb9e9: Pushed 0a85502c06c9: Pushed latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774
从 Amazon ECR 存储库中删除映像
从 VS Code 中删除映像的方法有两种。第一种方法是使用 AWS 资源管理器。
- 
        在 AWS 资源管理器中,展开 ECR 菜单 
- 
        展开要从中删除映像的存储库 
- 
        打开上下文菜单(右键单击),选择与您想要删除的映像关联的映像标签 
- 
        要删除与该标签关联的所有存储的映像,请选择删除标签… 
使用 AWS CLI 删除镜像
- 
        您也可以使用 AWS ecr batch-delete-image 命令从存储库中删除图像。 AWS ecr batch-delete-image \ --repository-namehello-world\ --image-ids imageTag=latest例 输出示例:{ "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }
从 Amazon ECR 实例中删除存储库
从 VS Code 中删除存储库的方法有两种。第一种方法是使用 AWS 资源管理器。
- 
        在 AWS 资源管理器中,展开 ECR 菜单 
- 
        打开上下文(右键单击)菜单,选择您要删除的存储库 
- 
        选择删除存储库…选项,以选择相应存储库 
从 CLI 中删除 Amazon ECR 存储库 AWS
- 
        您可以使用 AWS ecr delete-repository 命令删除存储库。 注意默认情况下,您不能删除包含映像的存储库。但是,--force 标记允许这样做。 AWS ecr delete-repository \ --repository-namehello-world\ --force例 输出示例:{ "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }