amazon-web-services - ECR 中的 Docker 图像标记
问题描述
我正在使用 Jenkins 在 AWS ECR 中推送 docker 映像。
在推送图像时,我将标签提供为 $Build_Number。因此,在 ECR 存储库中,我有带有 1、2、3、4 等标签的图像。
但是当我试图从 Jenkins 作业中使用以下命令从 EC2 中提取图像时
docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:latest
我收到一个错误,因为没有标签为最新的图像。
在这里,我想提取最新的图像(带有标签 4)。我不能在这里硬编码标签号,因为 docker pull 命令将自动从 Jenkins 作业运行。那么我可以通过什么方式提取最新的图像呢?
解决方案
我相信这里的正确方法是使用不同的标签两次推送相同的图像。一次推送将包含没有标签的图像,然后第二次推送将是您标记后的相同图像。
请注意,您不必构建映像两次。您只需要发出docker push
两次。
ECR 足够“智能”,可以识别图像摘要没有更改,并且不会尝试实际上传图像两次。在第二次推送时,只会将标签发送到 ECR。
现在您有了一个未标记的版本和一个标记的版本,您可以在没有标记规范的情况下拉取图像,您将获得:latest
图像。这是对 AWS 文档的参考,他们在其中提到:latest
如果用户未发送标签,则将添加标签。
流程看起来像这样:
# Build the image
docker build -f ./Dockerfile -t my-web-app
# Push the untagged image (will become the ":latest")
docker push my-web-app
# Tag the image with your build_number
docker tag my-web-app my-web-app:build_number
# Push the tagged image
docker push my-web-app:build_number
您现在将能够:
docker pull my-web-app:build_number
docker pull my-web-app
这将产生 2 个相同的图像,只有标签可以区分它们。
推荐阅读
- ethernet - 互联网会定期在路由器 Mikrotik 中消失
- python - 如何防止 vscode/ms-python 清除测试结果?
- python - 从 CSV 拆分列数据 - Python
- javascript - 为什么我获取的 JSON 有 [object] 而不是数组?
- django - 动态计数与数据库记录
- julia - Julia中具有不可打印字符的字符数组
- python - 有没有一种简单的方法可以将 Pandas DataFrame 上的大字符串拆分为相等数量的单词?
- javascript - 反应原生,图像组件加载与该链接关联的旧图像
- python - 将嵌套列表中的值返回到 PandasDataFrame
- c - 在文件 C 中构造 fscanf