AWS私有仓库ECR推送拉取镜像

1,023 阅读3分钟

- - -

 作者:SRE运维博客

 博客地址: www.cnsre.cn/ 

 文章地址:www.cnsre.cn/posts/21120…

 相关话题:www.cnsre.cn/tags/aws/

- - -

## 什么是 Amazon Elastic Container Registry(ECR)?

\

Amazon Elastic Container Registry (Amazon ECR) 是 Amazon 托管容器映像注册表服务,它安全、可扩展且可靠。Amazon ECR 支持私有存储库,其具有使用 Amazon IAM 的基于资源的权限。这样,指定用户或 Amazon EC2 实例可以访问您的容器存储库和映像。您可以使用首选 CLI 推送、提取和管理 Docker 映像、Open Container Itistry (OCI) 映像和 OCI 兼容构件。

\

## Amazon ECR 的功能

\

Amazon ECR 提供以下功能:

\

- 生命周期策略有助于管理存储库中映像的生命周期。您可以定义导致清理未使用映像的规则。您可以在将规则应用到存储库之前对其进行测试。有关更多信息,请参阅 生命周期策略

- 映像扫描有助于识别容器映像中的软件漏洞。每个存储库都可以配置为 在推送时扫描 。这可确保扫描推送到存储库的每个新映像。然后,您可以检索映像扫描的结果。有关更多信息,请参阅 映像扫描

- 跨区域和跨账户复制使您可以更轻松地将映像放置在需要的位置。它配置为注册表设置,并基于每个区域。有关更多信息,请参阅 私有注册表设置

\

## 推送 Docker 映像到 Amazon ECR 存储库

\

我们可以使用  docker push  命令将容器映像推送到 Amazon ECR 存储库。Amazon ECR 还支持创建和推送用于多架构映像的 Docker 清单列表。清单列表中引用的每个映像都必须已经被推送到我们的存储库。

\

### 在推送映像之前,Amazon ECR 存储库必须存在。

\

向要向其推送映像的 Amazon ECR 注册表验证 Docker 客户端的身份。必须针对每个注册表获得授权令牌,令牌有效期为 12 小时。

\

要对 Amazon ECR 注册表验证 Docker,请运行  aws ecr get-login-password  命令。将身份验证令牌传递给  docker login  命令时,将值 AWS 用作用户名,并指定要对其进行身份验证的 Amazon ECR 注册表 URI。如果对多个注册表进行身份验证,则必须针对每个注册表重复该命令。

\

{{< notice info "注意" >}}  

如果收到错误,请安装或更新到最新版本的 Amazon CLI。有关更多信息,请参阅  Amazon Command Line Interface 用户指南 中的安装 Amazon Command Line Interface

{{< /notice >}}

\

### 检索身份验证令牌并向注册表验证 Docker 客户端身份。

\

使用 亚马逊云科技 CLI:

\


aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin 12345678.dkr.ecr.cn-north-1.amazonaws.com.cn

\

{{< notice info "注意: " >}}  

如果您在使用 亚马逊云科技 CLI 时遇到错误,请确保您已安装最新版本的 亚马逊云科技 CLI 和 Docker。

{{< /notice >}}

\

###  构建 Docker 映像

\

如果您已生成映像,则可跳过此步骤:

\


docker build -t cnsre-test .

\

### 标记映像

\

生成完成后,标记您的映像,以便将映像推送到此存储库:

\


docker tag cnsre-test:latest 12345678.dkr.ecr.cn-north-1.amazonaws.com.cn/cnsre-test:latest

\

### 推送镜像

\

运行以下命令将此映像推送到新创建的 亚马逊云科技 存储库:

\


docker push 12345678.dkr.ecr.cn-north-1.amazonaws.com.cn/cnsre-test:latest

\

{{< notice info "注意" >}}  

出现 Head https://registry-1.docker.io/v2/library/node/manifests/14-alpine 的解决方法

{{< /notice >}}

\


vim /etc/docker/daemon.json 

\


# 添加国内的镜像 阿里云镜像 "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"] }

# 或者中科院镜像

"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }

\

重启Docker 

\


systemctl daemon-reload 

systemctl restart docker

\

## 拉取镜像

\

使用  docker pull  命令提取映像。映像名称格式应为 registry/repository[:tag] 以便按标签拉取,或为 registry/repository[@digest] 以便按摘要拉取。

\


docker pull 12345678.dkr.ecr.cn-north-1.amazonaws.com.cn/cnsre-test:latest

{{< notice info "注意" >}}  

如果您收到 repository-url not found: does not exist or no pull access 错误,您可能需要向 Amazon ECR 验证您的 Docker 客户端。有关更多信息,请参阅 私有注册表身份验证

{{< /notice >}}

- - -

 作者:SRE运维博客

 博客地址: www.cnsre.cn/ 

 文章地址:www.cnsre.cn/posts/21120…

 相关话题:www.cnsre.cn/tags/aws/

- - -