- 什么是dockerfile
- dockerfile是使用DSL(domain specific language)語法的指令來構(gòu)建一個docker鏡像攀涵,通過dockerfile來構(gòu)建docker鏡像更具備可重用性,透明性及冪等性
- dockerfile指令
- FROM指令:每一個dockerfile文件中的第一條指令必須是FROM指令。FROM指令指定一個已經(jīng)存在的基礎(chǔ)鏡像,后續(xù)指令都基于這個基礎(chǔ)鏡像進(jìn)行囱晴。
FROM python3.6.7
- RUN指令:該指令會在當(dāng)前鏡像中運行指定的linux命令
RUN apt-get install -y vim
- CMD指令:指定容器運行時要運行的命令
CMD ['/bin/bash', '-l']
- Note:docker run命令可以覆蓋CMD指令雀摘。如果在dockerfile指定了CMD指令,而同時在docker run命令中也指定了要運行的命令噪径,命令行中指定的命令會覆蓋dockerfile中的CMD指令
- ENTRYPOINT指令:該指令與CMD指令非常類似。他們的區(qū)別在于docker run命令指定的命令可以覆蓋dockerfile指定的CMD指令数初,而ENTRYPOINT指令則不容易在容器啟動時被覆蓋找爱。
Note:實際上,docker run命令中指定的任何參數(shù)都會被當(dāng)做參數(shù)再次傳遞給ENTRYPOINT指令中指定的命令泡孩。如果真的有需要可以在啟動容器時添加--entrypoint標(biāo)志來覆蓋ENTRYPOINT指令
ENTRYPOINT ['/usr/bin/nginx']
- WORKDIR:用來在從鏡像創(chuàng)建容器時车摄,在容器內(nèi)部設(shè)置一個工作目錄,ENTRYPOINT/CMD指定的程序會在這個目錄下運行
RUN mkdir workspace
WORKDIR workspace
- ENV:用來在鏡像構(gòu)建過程中設(shè)置環(huán)境變量
ENV GOBIN /usr/local/go/bin/
- USER:用來指定該鏡像會以什么樣的用戶運行
USER user
USER user:group
- VOLUME:用來向基于鏡像創(chuàng)建的容器添加卷。一個卷是可以存在于一個或者多個容器內(nèi)的特定的目錄吮播,這個目錄可以繞過聯(lián)合系統(tǒng)变屁,并提供如下共享數(shù)據(jù)或這對數(shù)據(jù)進(jìn)行持久化的功能
- 卷可以在容器中共享和重用
- 一個容器可以不是必須和其他容器共享卷
- 對卷的修改是立即生效的
- 對卷的修改不會對更新鏡像產(chǎn)生影響
- 卷會一直存在直到?jīng)]有容器再使用它
VOLUME ['/opt/myproject']
該指令會為基于此鏡像的任何容器創(chuàng)建一個名為/opt/myproject的掛載點 - ADD:用來將構(gòu)建環(huán)境的文件和目錄復(fù)制到鏡像中。ADD在處理歸檔文件時會自動將歸檔文件進(jìn)行解壓操作(.zip, .tar.gz...)
ADD redis-8.5.6.tar.gz /usr/local/redies
- COPY:與ADD指令類似薄料,它們的根本區(qū)別在于COPY指令只關(guān)心在構(gòu)建上下文中復(fù)制本地文件敞贡,而不會去做文件提取和解壓的工作。
COPY . /opt/myproject
- LABEL:為docker鏡像添加元數(shù)據(jù)摄职。
LABEL version="1.0"
LABEL localtion="china" type="data center" build_date="today"
- ONBUILD:能為鏡像添加觸發(fā)器誊役。當(dāng)一個鏡像被當(dāng)做其他鏡像的基礎(chǔ)鏡像時,該鏡像中的觸發(fā)器將會被執(zhí)行谷市。
ONBUILD ADD . /opt/myproject
ONBUILD RUN cd /opt/myproject/src
- EXPOSE:對外暴露容器的一個端口
EXPOSE 9090
that's all