我有一个jenkins服务器监视git repo并在代码更改时构建docker镜像..git目录作为构建的一部分被忽略,但我想将git commit hash与图像相关联,以便我确切地知道用于创建它的代码版本并检查图像是否是最新的.
显而易见的解决方案是使用"application-name-branch-name:commit-hash"之类的标签来标记图像,但是对于许多开发分支我只想保留最后的良好构建,添加更多标记将清理旧版本更难(而不是在构建图像时使用jenkins构建编号,然后重新标记为:最新并取消构建编号)
另一种可能性是标签,但虽然这看起来很有希望,但事实证明它们更复杂.
我可以看到直接将标签应用于图像的唯一方法是Dockerfile,它不能使用构建环境变量,因此我需要使用某种模板来生成自定义Dockerfile.
应用标签的另一种方法是使用一些简单的命令(例如bash)从图像中启动容器,并将标签作为docker run arguments传递.然后可以将容器作为新图像提交.这有一个令人遗憾的副作用是使图像的默认命令与标签容器一起使用(在这种情况下是bash),而不是原始Dockerfile中的任何内容.对于我的应用程序,我无法使用实际命令,因为它将开始更改应用程序状态.
这些似乎都不是特别理想 - 还有其他人找到了更好的方法吗?
小智 21
在docker v1.9.0中添加了对此的支持,因此将docker安装更新到该版本将解决您的问题,如果可以的话.
用法在下面的pull-request中描述:
https://github.com/docker/docker/pull/15182
例如,采用以下Dockerfile文件:
FROM busybox
ARG GIT_COMMIT=unknown
LABEL git-commit=$GIT_COMMIT
Run Code Online (Sandbox Code Playgroud)
并将其构建为一个名为test
任何人都会天真地做的图像:
docker build -t test .
Run Code Online (Sandbox Code Playgroud)
然后检查test
图像以检查git-commit
标签的最终值:
docker inspect -f '{{index .ContainerConfig.Labels "git-commit"}}' test
Run Code Online (Sandbox Code Playgroud)
不明
现在,再次构建图像,但这次使用--build-arg
选项:
docker build -t test --build-arg GIT_COMMIT=0123456789abcdef .
Run Code Online (Sandbox Code Playgroud)
然后检查test
图像以检查git-commit
标签的最终值:
docker inspect -f '{{index .ContainerConfig.Labels "git-commit"}}' test
Run Code Online (Sandbox Code Playgroud)
0123456789ABCDEF
参考文献:
--build-arg
选项的Docker构建命令文档ARG
指令的Dockerfile参考LABEL
指令的Dockerfile参考 归档时间: |
|
查看次数: |
14536 次 |
最近记录: |