在 VS Code 中使用 Amazon Elastic Container Registry 服务 - AWS Toolkit for VS Code

在 VS Code 中使用 Amazon Elastic Container Registry 服务

您可以直接从 VS Code 中的 AWS Explorer 访问 Amazon Elastic Container Registry(Amazon ECR)服务,然后使用它将程序映像推送到 Amazon ECR 存储库。要开始使用,您需要执行以下步骤:

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

  2. 从该 Dockerfile 生成映像并标记该映像以供处理。

  3. 在 Amazon ECR 实例内创建一个存储库。

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

先决条件

在使用 Toolkit for VS Code 的 Amazon ECR 服务功能之前,您必须满足以下先决条件

1. 创建 Dockerfile

Docker 使用名为“Dockerfil”的文件来定义可以推送和存储在远程存储库中的映像。您必须先创建 Dockerfile,然后通过该 Dockerfile 构建映像,然后才能将映像上传到 ECR 存储库。

创建 Dockerfile
  1. 使用 Toolkit for 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。RUN 指令将更新软件包缓存。安装一些适用于 Web 服务器的软件包,然后将“Hello World!” 内容写入到 Web 服务器的文档根目录。EXPOSE 指令在容器上公开端口 80,而 CMD 指令启动 Web 服务器。

  3. 保存您的 Dockerfile。

    重要

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

2. 通过 Dockerfile 构建映像

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

通过 Dockerfile 构建映像
  1. 要导航到包含您的 Dockerfile 的目录,请使用 Docker CLI 或与您的 Docker 实例集成的 CLI。

  2. 要构建在 Dockerfile 中定义的映像,请运行 Docker build 命令。

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

    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 选项将容器上暴露的端口 80 映射到主机系统的端口 80。如果您正在本地运行 Docker,可使用 Web 浏览器导航至 http://localhost:80。如果程序运行正常,系统将显示 “Hello World!”语句。

    有关 Docker run 命令的更多信息,请参阅 Docker 网站上的 Docker Run 参考

3. 创建新存储库

要将您的映像上载到您的 Amazon ECR 实例,请创建一个新的存储库来存储它。

创建新的 Amazon ECR 存储库
  1. 从 VS Code 活动栏中,选择 AWS Toolkit 图标

  2. 展开 AWS Explorer 菜单。

  3. 找到与您的 AWS 相关联的默认 AWS 区域。然后,选择它以查看通过 Toolkit for VS Cod 提供的服务列表。

  4. 选择 ECR + 选项以开始创建新存储库流程。

  5. 要完成该流程,请按照提示操作。

  6. 该流程完成后,您可以从 AWS Explorer 菜单的 ECR 部分访问新存储库。

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

从 Dockerfile 构建映像并创建存储库后,您可以将映像推送到 Amazon ECR 存储库中。此外,将 AWS Explorer 与 Docker 和 AWS CLI 结合使用,您可以执行以下操作:

  • 从存储库中提取映像。

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

  • 删除存储库。

使用默认存储库对 Docker 进行身份验证

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

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

  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 更新为您的 AWS 账户的特定信息。

标记映像并将其推送到存储库

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

  1. 使用 Docker images 命令查看您在本地存储的映像,并识别要标记的映像。

    docker images
    例 输出示例:
    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  2. 使用 Docker tag 命令标记映像。

    docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  3. 使用 Docker tag 命令将标记的映像推送到您的存储库。

    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

将标记的映像成功上传到存储库后,它就会显示在 AWS Explorer 菜单中。

从 Amazon ECR 拉取映像
  • 您可以将映像拉取到您的 Docker tag 命令的本地实例。

    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 中删除映像的方法有两种。第一种方法是使用 AWS Explorer。

  1. 在 AWS Explorer 中,展开 ECR 菜单

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

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

  4. 要删除与该标签关联的所有存储的映像,请选择删除标签…

使用 AWS CLI 删除映像
  • 您也可以使用 AWS ecr 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 中删除存储库的方法有两种。第一种方法是使用 AWS Explorer。

  1. 在 AWS Explorer 中,展开 ECR 菜单

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

  3. 选择删除存储库…选项,以选择相应存储库

从 AWS CLI 中删除 Amazon ECR 存储库
  • 您可以使用 AWS ecr delete-repository 命令删除存储库。

    注意

    默认情况下,您不能删除包含映像的存储库。但是,--force 标记允许这样做。

    AWS ecr delete-repository \ --repository-name hello-world \ --force
    例 输出示例:
    { "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }