天天看點

DockerFile系統的學習

1.背景

DockerFile定義:用來建構Docker鏡像的檔案,有腳本指令組成。

自定義鏡像并運作步驟:

編寫dockerFile檔案--》docker build為鏡像--》docker run 運作鏡像

dockerFile檔案模闆可以在官網看到:

https://hub.docker.com/

DockerFile系統的學習

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,指導所有指令執行完

DockerFile系統的學習

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檔案夾,并準備如下素材

DockerFile系統的學習

建構檔案: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 .

DockerFile系統的學習
DockerFile系統的學習

第三步, 運作上一步建構的lidongping/tomcat01 鏡像

指令:docker run -d -p 8081:8080 lidongping/tomcat01

DockerFile系統的學習

 第四步,通路tomcat,看是否正常

DockerFile系統的學習

 完美!

系統化學習docker教程:

https://www.cnblogs.com/newAndHui/p/13508771.html