Docker鏡像的定制
在上一篇文章尘喝,僅僅只是大致介紹了Docker的Image、Container以及Registry髓棋。這里將對于鏡像有更詳細的介紹昨忆。
Dockerfile
雖然說在Docker hub上提供了很多完善的鏡像,但是由于具體情況需求抓督,我們需要去具體定制鏡像燃少,因此就可以利用到Dockerfile,dockerfile相當于一個文本文件铃在,里面包含了一條條的指令阵具,每一條指令構建一層,因此每一條指令都是在具體描述如何構建每一層定铜。
當文件書寫完畢之后阳液,可以利用以下命令來構建
docker build .
要理解這條指令,需要明白兩個地方揣炕,第一是docker build的工作原理帘皿,第二個是Context,可以理解為構建上下文畸陡。
---Docker build: docker在運行時候分為Docker引擎(服務端守護進程)和客戶端工具鹰溜。Docker引擎提供REST API,稱為Docker Remote Api丁恭,而客戶端工具則利用這組api與引擎完成交互曹动。
---Context: 由于在自定義鏡像時候,不僅僅執(zhí)行的RUN命令牲览,還有ADD墓陈,COPY之類,這種需要將本地文件復制進鏡像中去,就需要有環(huán)境上下文了贡必,當用戶開始構建時候熬的,用戶會指定構建上下文的路徑,docker build獲取這個命令之后赊级,就會打包該路徑下的內容,然后發(fā)送給docker引擎岔绸。
多階段構建鏡像
之前要進行多階段構建鏡像的時候理逊,需要將所有的構建過程全部放入一個dockerfile里面,隨之帶來的缺點也是顯而易見的盒揉,難以維護晋被,鏡像體積變大,部署時間變長刚盈。
還有一種方法是分開構建羡洛,將不同的dockerfile整合起來,但是流程過于復雜藕漱。
還有一種方法是利用多階段構建的方式欲侮,Docker17.05開始支持多階段構建(multistage builds),這個可以很容易解決之前兩種方法遇到的問題肋联,并且只需要一個dockerfile威蕉。