1. 程式人生 > 實用技巧 >DockerFile系統的學習

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.每條指令的關鍵字必須大寫,且後面至少要有一個引數

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<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,看是否正常

完美!