DockerFile系統的學習
1.背景
DockerFile定義:用來構建Docker映象的檔案,有指令碼命令組成。
自定義映象並執行步驟:
編寫dockerFile檔案--》docker build為映象--》docker run 執行映象
dockerFile檔案模板可以在官網看到:
https://hub.docker.com/
2.基本語法介紹
dockerFile的基礎規則
1.dockerfile 一般分為四部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令。
2.Docker以從上到下的順序執行Dockerfile的指令。
3.以#字元開頭則被視為註釋。
4.第一條指令必須是FROM,用來確定基本映象來源。
5.每條指令的關鍵字必須大寫,且後面至少要有一個引數
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<851298348@qq.com.com>,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,看是否正常
完美!