原文html
Docker image的tag是不稳定的,这句话的意思是就算tag不变,其所表明的image并不是一成不变,例如openjdk:8
在去年表明jdk 8u161今年则表明jdk 8u191。就算你使用openjdk:8u181
也不能保证这个image是不变的,为何这么说?git
一个Docker image大体是由4部分组成的:程序员
FROM
指令所指定docker-entrypoint.sh
就算软件不发生变化,另外3个也是有可能发生变化的,而构建的新image的tag依然是openjdk:8u181
。并且要注意到通常采用的是软件的版本号做为tag,而不是commit、构建日期做为tag。若是你是Java程序员,能够类比docker image tag为maven的SNAPSHOT。github
那这意味着什么?docker
和Maven的版本定义同样,你的软件应该分为两种:apache
对于stable版,你应该按期对其构建image。好比你有版本1.0、1.一、1.2,那你应该按期从软件仓库中下载这三个版本的构建物,而后对为它们构建image。以Maven举例,按期从Maven仓库下载它们的Jar,而后为它们构建image。记得确保docker build
添加了--pull
选项。并发
对于snapshot版,你应该将构建image的过程融入到软件的构建过程当中。以Maven为例,使用spotify-dockerfile-plugin,mvn clean install dockerfile:build dockerfile:push
。maven
不管是stable版仍是snapshot版,都应该利用CI/CD工具(如Jenkins)将image构建工做自动化。ide