gpt4 book ai didi

docker - 如何始终提取最新的docker镜像,但仍确定性地记录其组成以供将来重现?

转载 作者:行者123 更新时间:2023-12-02 20:58:42 25 4
gpt4 key购买 nike

我正在我管理的“实验室”泊坞程序环境中进行分析工作。我使用Travis来构建,标记实验室图像并将其发布到Docker容器注册表(AWS ECR),然后在启动容器进行分析工作时始终提取latest图像。这样可以确保我始终在最新版本的Lab环境中工作。注意:Travis每次发布新图像时,都会在ECR中使用生成git commit ID latest对其进行标记。

为了使分析结果具有可重复性,我希望在容器内运行的python代码能够在其输出中记录一个标识符,该标识符指示所使用的确切docker镜像。这将使我能够在数月/数年后从ECR重新下载该特定的docker镜像,和/或找到构建该docker镜像的git commit,再次运行代码,并(希望!)获得相同的结果。

实现此目标的最标准方法是什么?我是否可以将图像摘要存储为容器内的环境变量?

最佳答案

可能有几种选择,但这取决于图像的构建方式

假设源代码是​​在CI中克隆的,并且从该源代码构建了镜像(因此您没有在Dockerfile中克隆源代码),则可以使用build-arg来“烘焙”镜像中的提交,环境变量

在Dockerfile中,定义一个build-arg(ARG),并将其值分配给一个环境变量(ENV)。需要将它分配给ENV,因为(设计使然)build-args不会持久存在于镜像本身中(仅在构建期间可用)。

例如:

FROM busybox:latest
ARG GIT_COMMIT=HEAD
ENV GIT_COMMIT=${GIT_COMMIT}

我正在设置默认值,以便在构建Dockerfile而不传递build-arg的情况下,该变量包含“有用”的内容

然后,在构建镜像时,将git commit作为构建arg传递
git clone https://github.com/me/my-repo.git && cd my-repo

export GIT_COMMIT=$(git rev-parse --short --verify HEAD)

docker build -t lab:${GIT_COMMIT} --build-arg GIT_COMMIT=${GIT_COMMIT} .

运行镜像时, GIT_COMMIT可用作环境变量。

如果要在运行时(运行镜像时)传递引用,则可以在运行镜像时传递引用;否则,可以在运行镜像时传递引用。例如,传递正在运行的图像的摘要;
docker pull lab:latest

export IMAGE_DIGEST=$(docker inspect --format '{{ (index .RepoDigests 0) }}' lab:latest)

docker run -it --rm -e IMAGE_DIGEST=${IMAGE_DIGEST} lab:latest

关于docker - 如何始终提取最新的docker镜像,但仍确定性地记录其组成以供将来重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com