在 VS Code 中使用亚马逊弹性容器注册表服务 - AWSToolkit for VS Code

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 VS Code 中使用亚马逊弹性容器注册表服务

您可以直接从 Amazon Elastic Container Registry (Amazon ECR) 服务AWSVS Code 中的资源管理器,并使用它来将程序映像推送到 Amazon ECR 存储库。要开始使用,您需要执行以下步骤:

  1. 创建一个 Dockerfile,其中包含构建映像所需的信息。

  2. 从该 Dockerfile 构建映像并标记要处理的映像。

  3. 在您的 Amazon ECR 实例中创建存储库。

  4. 将标记映像推送到存储库。

先决条件

在使用适用于 VS Code 的工具包的 Amazon ECR 服务功能之前,您必须满足以下条件先决条件.

1. 创Dockerfile Dock

Docker 使用名为 Dockerfile 的文件来定义一个可以推送并存储在远程仓库中的映像。在将映像上传到 ECR 存储库之前,必须先创建 Dockerfile,然后从该 Dockerfile 构建映像。

创Dockerfile Dock

  1. 使用 VS Code 资源管理器工具包导航到要存储 Dockerfile 的目录。

  2. 创建名为的新文件Dockerfile.

    注意

    VS Code可能提示您选择文件类型或文件扩展名。如果发生这种情况,选择明文. Vs Code 有一个 “dockerfile” 扩展名。但是,我们不建议您使用它。这是因为该扩展可能会导致与某些版本的 Docker 或其他相关应用程序发生冲突。

使用 VS Code 编辑你的 Dockerfile

如果您的 Dockerfile 具有文件扩展名,请打开该文件的上下文(右键单击)菜单,然后删除该文件扩展名。

从 Dockerfile 中移除文件扩展名后:

  1. 直接在 VS Code 中打开空的 Dockerfile。

  2. 将以下示例的内容复制到您的 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。这些区域有:运行说明更新程序包缓存。安装适用于 Web 服务器的软件包,然后将 “Hello World!” 内容添加到 Web 服务器的文档根目录。这些区域有:暴露指令在容器上公开端口 80,并且CMD指令启动 Web 服务器。

  3. 保存您的 Dockerfile。

    重要

    请确保您的 Dockerfile 名称中没有附加扩展名。带有扩展名的 Dockerfile 可能会导致与某些版本的 Docker 或其他相关应用程序发生冲突。

2. 从您的 Dockerfile 构建您的镜像

您创建的 Dockerfile 包含为程序构建映像所需的信息。您必须先构建映像,然后才能将该映像推送到 Amazon ECR 实例。

从您的 Dockerfile 构建镜像

  1. 使用 Docker CLI 或与 Docker 实例集成的命令行界面导航到包含 Dockerfile 的目录。

  2. 运行Docker 构建命令来构建在 Dockerfile 中定义的映像。

    docker build -t hello-world .
  3. 运行Docker 映像命令以验证是否已正确创建镜像。

    docker images --filter reference=hello-world

    例 输出示例:

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  4. 注意

    创建或推送映像不需要执行此步骤,但您可以看到程序映像在运行时是如何工作的。

    要运行新构建的映像,使用Docker Run命令。

    docker run -t -i -p 80:80 hello-world

    这些区域有:-p在前面的例子中指定的选项映射暴露的Port 80在集装箱上Port 80主机系统的任务。如果你在本地运行 Docker,请导航到http://localhost:80使用您的 Web 浏览器。如果程序运行正常,则显示 “Hello World!” 将显示语句。

    有关的更多信息。Docker Run命令,请参阅Docker 运行Docker在 Docker 网站上。

3. 创建新存储库

要将映像上传到 Amazon ECR 实例,请创建一个新的存储库,以便将其存储在中。

创建新的 Amazon ECR 存储库

  1. 来自 VS 代码活动栏,选择AWS工具包图标.

  2. 展开 Toor AWS探险者菜单。

  3. 找到默认值AWS与您的关联的地区AWSaccount. 然后,选择它以查看通过适用于 VS Code 的 Toolkit 提供的服务的列表。

  4. 选择ECR +选项来启动创建新存储库进程。

  5. 按照提示完成该过程。

  6. 完成后,您可以从ECR的 部分AWSExpler 菜单。

4. 推送、提取和删除映像

从 Dockerfile 构建映像并创建存储库后,您可以将映像推送到 Amazon ECR 存储库中。此外,使用AWS使用 Docker 的资源管理器和AWSCI,您可以执行以下操作:

  • 从存储库中拉取映像。

  • 删除存储在仓库中的映像。

  • 删除您的仓库。

使用您的默认注册表对 Docker 进行身份验证

在 Amazon ECR 和 Docker 实例之间交换数据时需要进行身份验证。要使用注册表验证 Docker 的身份:

  1. 打开连接到您的实例的命令行操作系统AWSCI。

  2. 使用get-login-password方法向您的私有 ECR 注册表进行身份验证。

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin AWS_account_id.dkr.ecr.region.amazonaws.com
    重要

    在上述命令中,您必须更新两个regionAWS_account_id到特定于你的信息AWSaccount.

标记镜像并推送到存储库

使用您的实例对 Docker 进行身份验证后AWS,将镜像推送到存储库。

  1. 使用Docker 映像命令来查看存储在本地的映像并确定要标记的映像。

    docker images

    例 输出示例:

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  2. 使用标记你的图片Docker 标签命令。

    docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  3. 使用 taged images 推送到存储库Docker 标签命令。

    docker push AWS_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

将标记的映像成功上传到仓库后,它会显示在AWSExpler 菜单。

从 Amazon ECR 拉取映像

  • 您可以将映像拉到您的本地实例Docker 标签命令。

    docker pull AWS_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 中删除镜像有两种方法。第一种方法是使用AWSExpler

  1. 从...AWS资源管理器,展开ECR菜单

  2. 展开要从中删除图像的存储库

  3. 通过打开上下文菜单(右键单击),选择与要删除的图像关联的图像标签

  4. 选择删除标签...选项可删除与该标记关联的所有存储映像

使用删除映像AWSCLI

  • 您还可以使用 files 从存储库中删除镜像。AWSecr batch-delete-image命令。

    AWS ecr batch-delete-image \ --repository-name hello-world \ --image-ids imageTag=latest

    例 输出示例:

    { "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }

从您的 Amazon ECR 实例中删除存储库

有两种方法可以从 VS Code 中删除仓库。第一种方法是使用AWSExpler

  1. 从...AWS资源管理器,展开ECR菜单

  2. 打开上下文(右键单击)菜单,选择要删除存储库

  3. 选择删除存储库...选定的存储库的选项

从 Amazon ECR 存储库中删除AWSCLI

  • 您可以使用删除仓库AWSecr 删除存储库命令。

    注意

    默认情况下,您无法删除包含镜像的存储库。但是,在--force标志允许这样做。

    AWS ecr delete-repository \ --repository-name hello-world \ --force

    例 输出示例:

    { "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }