原文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