本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 VS Code 中使用 Amazon Elastic Container Registry 服务
您可以直接从 VS Code 中的 AWS Explorer 访问 Amazon Elastic Container Registry(Amazon ECR)服务,然后使用它将程序映像推送到 Amazon ECR 存储库。要开始使用,您需要执行以下步骤:
-
创建一个 Dockerfile,其中包含构建映像所需的信息。
-
从该 Dockerfile 生成映像并标记该映像以供处理。
-
在 Amazon ECR 实例内创建一个存储库。
-
将标记的映像推送到此存储库。
先决条件
在使用 Toolkit for VS Code 的 Amazon ECR 服务功能之前,您必须满足以下先决条件。
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 Explorer 菜单。
-
找到与您的 AWS 相关联的默认 AWS 区域。然后,选择它以查看通过 Toolkit for VS Cod 提供的服务列表。
-
选择 ECR + 选项以开始创建新存储库流程。
-
要完成该流程,请按照提示操作。
-
该流程完成后,您可以从 AWS Explorer 菜单的 ECR 部分访问新存储库。
4. 推送、拉取和删除映像
从 Dockerfile 构建映像并创建存储库后,您可以将映像推送到 Amazon ECR 存储库中。此外,将 AWS Explorer 与 Docker 和 AWS CLI 结合使用,您可以执行以下操作:
-
从存储库中提取映像。
-
删除存储在存储库中的映像。
-
删除存储库。
使用默认存储库对 Docker 进行身份验证
在 Amazon ECR 实例和 Docker 实例之间交换数据要求进行身份验证。使用注册表对 Docker 进行身份验证:
-
打开连接到 AWS CLI 实例的命令行操作系统。
-
使用 get-login-password 方法向您的私有 ECR 注册表进行身份验证。
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdinAWS_account_id
.dkr.ecr.region
.amazonaws.com重要
在上述命令中,您必须将
region
和AWS_account_id
更新为您的 AWS 账户的特定信息。
标记映像并将其推送到存储库
使用 AWS 的实例对 Docker 进行身份验证后,将映像推送到您的存储库。
-
使用 Docker images 命令查看您在本地存储的映像,并识别要标记的映像。
docker images
例 输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
-
使用 Docker tag 命令标记映像。
docker tag hello-world:latest
AWS_account_id
.dkr.ecr.region
.amazonaws.com/hello-world:latest -
使用 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。
-
在 AWS Explorer 中,展开 ECR 菜单
-
展开要从中删除映像的存储库
-
打开上下文菜单(右键单击),选择与您想要删除的映像关联的映像标签
-
要删除与该标签关联的所有存储的映像,请选择删除标签…
使用 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。
-
在 AWS Explorer 中,展开 ECR 菜单
-
打开上下文(右键单击)菜单,选择您要删除的存储库
-
选择删除存储库…选项,以选择相应存储库
从 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" } ] }