dockerfile
Dockerfile
是一個(gè)Docker
鏡像的描述文件坦辟。Dockerfile
其內(nèi)部包含了一條條的指令,每一條指令構(gòu)建一層折柠,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建批狐。
From:基礎(chǔ)鏡像
? 所謂定制鏡像扇售,那一定是以一個(gè)鏡像為基礎(chǔ),在其上進(jìn)行定制,基礎(chǔ)鏡像是必須指定的嚣艇。而 FROM
就是指定基礎(chǔ)鏡像承冰,因此一個(gè) Dockerfile
中 FROM
是必備的指令,并且必須是第一條指令食零。
MAINTAINER:維護(hù)者信息
? 用于聲明作者困乒,并應(yīng)該放在FROM的后面.
COPY :文件復(fù)制
? 將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄 復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置。<源路徑> 可以是多個(gè)贰谣,甚至可以是通配符(COPY hom?.txt /mydir/
) <目標(biāo)路徑> 可以是容器內(nèi)的絕對(duì)路徑娜搂,也可以是相對(duì)于工作目錄的相對(duì)路徑(工作目錄可以用 WORKDIR
指令來指定)使用copy
命令,源文件的各種元數(shù)據(jù)都會(huì)保留吱抚。比如讀百宇、寫、執(zhí)行權(quán)限秘豹、文件變更時(shí)間等携御。在 COPY
和 ADD
指令中選擇的時(shí)候,可以遵循這樣的原則,所有的文件復(fù)制均使用 COPY
指令啄刹,僅在需要自動(dòng)解壓縮的場合使用 ADD
涮坐。
RUN :需要執(zhí)行的命令
? 指令是用來執(zhí)行命令行命令的。
WORKDIR :當(dāng)前工作目錄
? 使用WORKDIR
指令可以來指定工作目錄(或者稱為當(dāng)前目錄)誓军,以后各層的當(dāng)前目錄就被改為指定的目錄膊升,如該目錄不存在,WORKDIR
會(huì)幫你建立目錄
VOLUME:掛載主機(jī)目錄
? 容器運(yùn)行時(shí)應(yīng)該盡量保持容器存儲(chǔ)層不發(fā)生寫操作谭企,對(duì)于數(shù)據(jù)庫類需要保存動(dòng)態(tài)數(shù)據(jù)的應(yīng)用廓译,其數(shù)據(jù)庫文件應(yīng)該保存于卷(volume
)中,為了防止運(yùn)行時(shí)用戶忘記將動(dòng)態(tài)文件所保存目錄掛載為卷债查,在 Dockerfile
中非区,我們可以事先指定某些目錄掛載為匿名卷,這樣在運(yùn)行時(shí)如果用戶不指定掛載盹廷,其應(yīng)用也可以正常運(yùn)行征绸,不會(huì)向容器存儲(chǔ)層寫入大量數(shù)據(jù)。
LABEL:指定標(biāo)簽
? 為鏡像指定標(biāo)簽俄占。LABEL
會(huì)繼承基礎(chǔ)鏡像種的LABEL
管怠,如遇到key
相同,則值覆蓋缸榄。
ENV:環(huán)境變量
? 設(shè)置環(huán)境變量渤弛。無論是后面的其它指令,如 RUN
甚带,還是運(yùn)行時(shí)的應(yīng)用她肯,都可以直接使用這里定義的環(huán)境變量。
CMD:容器啟動(dòng)后執(zhí)行
? Docker
不是虛擬機(jī)鹰贵,容器就是進(jìn)程晴氨。既然是進(jìn)程,那么在啟動(dòng)容器的時(shí)候碉输,需要指定所運(yùn)行的程序及參數(shù)籽前。CMD
指令就是用于指定默認(rèn)的容器主進(jìn)程的啟動(dòng)命令的。shell 格式:CMD<命令> ,exec 格式:CMD ["可執(zhí)行文件","參數(shù)1", "參數(shù)2"...]
它主要作用是默認(rèn)的容器啟動(dòng)執(zhí)行命令
ENTRYPOINT:容器入口敷钾,替代CMD
? Entrypoint
用于指定容器鏡像的入口程序枝哄,或者說根應(yīng)用
? cmd
是默認(rèn)命令。如果docker run
鏡像名 xxx, 則會(huì)用xxx覆蓋鏡像中默認(rèn)的cmd
參數(shù)闰非, 如果沒有xxx膘格,則使用鏡像中默認(rèn)的cmd
作為參數(shù)傳入
dockerfile示例:
#指定基礎(chǔ)鏡像
FROM lwieske/java-8:latest
#標(biāo)明維護(hù)人信息
MAINTAINER twilightGB
#測試一下網(wǎng)絡(luò)環(huán)境
RUN ping -c 1 www.baidu.com
#數(shù)據(jù)掛載位置
VOLUME /tmp
#對(duì)外暴露端口
EXPOSE 80 9099
#復(fù)制文件
ADD warn-0.0.1-SNAPSHOT.jar app.jar
#指定容器鏡像的入口程序 鏡像啟動(dòng)時(shí)啟動(dòng)
ENTRYPOINT ["java","-jar","/app.jar"]