1.背景
DockerFile定義:用來建構Docker鏡像的檔案,有腳本指令組成。
自定義鏡像并運作步驟:
編寫dockerFile檔案--》docker build為鏡像--》docker run 運作鏡像
dockerFile檔案模闆可以在官網看到:
https://hub.docker.com/

2.基本文法介紹
dockerFile的基礎規則
1.dockerfile 一般分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行指令。
2.Docker以從上到下的順序運作Dockerfile的指令。
3.以#字元開頭則被視為注釋。
4.第一條指令必須是FROM,用來确定基本鏡像來源。
5.每條指令的關鍵字必須大寫,且後面至少要有一個參數
6.每條指令都會建立一個新的鏡像層,并送出鏡像産生id
Docker build執行dockerFile的流程
1.docker從基礎鏡(由From 指定)像運作一個容器
2.由上往下執行指令,并對容器作出修改
3.修改完成後送出一個新的鏡像并傳回鏡像id
4.docker再基于剛才的新鏡像運作一個新的容器
5.接着執行下一條指令,重複步驟2、3、4,指導所有指令執行完
3.dockerFile關鍵字
如下講解,我們以建構一個tomcat鏡像為例,說明常用關鍵字
3.1.FROM
作用:指定基礎鏡像,目前新鏡像是基于哪個鏡像的。
案例:FROM centos
備注:如果沒有基礎鏡像,需要寫成 FROM scratch,這個鏡像是虛拟的概念,并不實際存在,它表示一個空白的鏡像
3.2.MAINTAINER
[maintainer : n.維護者;維護裝置;軟體維護人員;(律 史)非法幫助訴訟者]
作用:鏡像維護者的姓名和郵箱位址
案例:MAINTAINER lidongping <[email protected]>
3.3.RUN
作用:容器建構時需要運作的指令
案例:RUN yum -y install vim ,表示安裝vim編輯器功能
3.4.ENV
作用:定義一個變量,與Java中定義一個常量一樣的道理
案例:ENV WORK_PATH /usr/local
3.5.WORKDIR
作用:指定在建立容器後,終端預設登陸進來的工作目錄
案例:WORKDIR $WORK_PATH
備注:這裡使用了上一步的ENV WORK_PATH /usr/local變量,等同于WORKDIR /usr/local
3.6.COPY
作用:拷貝檔案和目錄到鏡像中
案例:COPY readme.txt /home
備注:将目前檔案下的readme.txt 拷貝到容器中的centos中的home目錄下
3.7.ADD
作用:與上面的copy作用一樣,拷貝檔案和目錄到鏡像中,隻是ADD指令會自動處理URL和解壓tar壓縮包
案例:ADD jdk-8u131-linux-x64.tar.gz /usr/local/
3.8.EXPOSE
作用:目前容器對外暴露出的端口
案例:EXPOSE 8080
3.9.CMD
作用:指定一個容器啟動時要運作的指令。可以有多個CMD指令,但隻有最後一個生效,CMD 會被docker run 之後的參數替換;
案例:CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
3.10.ENTRYPOINT
entry point 入口點,進入點
作用:指定一個容器啟動是要運作的指令。ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程式及參數,但是ENTRYPOINT不會被docker run 之後的參數替換;
案例:ENTRYPOINT ["/usr/local/apache-tomcat-8.5.41/bin/startup.sh" ]
3.11.VOLUME
volume 體積,容器
作用:容器資料卷,用于資料儲存和持久化工作
案例:VOLUME ["/c-data01", "/c-data02","/更多路徑"]
到此,常用的指令大概就這些,更多的指令大家可以自己查官方文檔,使用方式和套路大緻是一樣的。
4.實際案例
本案例以建構一個tomcat鏡像為實際案例作為示範
第一步,準備素材,
在根路徑下建立myTomcat檔案夾,并準備如下素材
建構檔案:dockerFileTomcat檔案内容如下
#基礎容器來自于centos
FROM centos
#設定維護者的郵箱和微信
MAINTAINER email:lidongping<[email protected]>,wechat:851298348
#安裝vim編輯器
RUN yum -y install vim
#預設的centos容器時不帶ifconfig指令的,安裝ip查詢工具,即可以使用ifconfig指令
#RUN yum install net-tools
#定義一個變量,類似于java中定義一個常量
ENV WORK_PATH /usr/local
#設定工作通路時候的WORKDIR路徑,即進入容器後的預設工作目錄
WORKDIR $WORK_PATH
#把主控端目前上下文的readme.txt拷貝到容器/usr/local/路徑下
COPY readme.txt $WORK_PATH/readme.txt
#把java與tomcat拷貝到容器并解壓
ADD jdk-8u131-linux-x64.tar.gz $WORK_PATH/
ADD apache-tomcat-8.5.41.tar.gz $WORK_PATH/
#配置java、tomcat環境變量
ENV JAVA_HOME $WORK_PATH/jdk1.8.0_131
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME $WORK_PATH/apache-tomcat-8.5.41
ENV CATALINA_BASE $WORK_PATH/apache-tomcat-8.5.41
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器運作時監聽的端口
EXPOSE 8080
#啟動tomcat
CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
第二步,執行建構鏡像指令
docker build -f /myTomcat/dockerFileTomcat -t lidongping/tomcat01 .
注意:如果建構檔案名稱為:Dockerfile,且在目前路徑下,可以直接寫為:docker build -t lidongping/tomcat01 .
第三步, 運作上一步建構的lidongping/tomcat01 鏡像
指令:docker run -d -p 8081:8080 lidongping/tomcat01
第四步,通路tomcat,看是否正常
完美!
系統化學習docker教程:
https://www.cnblogs.com/newAndHui/p/13508771.html