1. 程式人生 > >Docker技術三——DockerFile檔案

Docker技術三——DockerFile檔案

什麼是DockerFile

DockerFile是搬運工映象的構建檔案

DockerFile入門 

以CentOS的的的構建檔案為例

FROM scratch                   //所有映象的繼承  相當於java的超類
ADD centos-7-docker.tar.xz 

LABEL org.label-schema.schema-version="1.0" \   //檔案 描述
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20181006"

CMD ["/bin/bash"]   //自動執行

 

DockerFile的語法

  1. 所有保留字必須大寫且後面必須有引數
  2. 從上到下執行
  3. #表示註釋
  4. 每條執行都會產生一個新的映象層,並且對映象進行提交

DockerFile的解析過程 

  1. 先從基礎映象執行一個容器
  2. 執行一條指令對容器進行修改
  3. 通過類似於docker commit的方式製作一個新的映象
  4. 再用新的映象執行一個新的容器
  5. 繼續執行一條指令直到所有的指令執行完畢

DockerFile保留字指令

保留字指令
基礎映象,當前新映象是基於那個映象的
MAINTAINER 映象維護者的姓名和郵箱地址
容器構建時需要執行的指令
暴露 當前容器對外暴露出的埠

WORKDIR

指定在建立容器後,終端預設登入的進來的工作目錄,一個落腳點
ENV 用來在構建映象過程中設定環境變數
將宿主機目錄下的檔案拷貝進映象且ADD命令會自動處理URL和解壓焦油壓縮包
複製 類似ADD,拷貝檔案和目錄到映象中。將從構建上下文目錄中“原路徑”的檔案/目錄複製到新的一層的映象內的“目標路徑”位置
體積 容器資料卷,用於資料儲存和持久化工作
CMD 指定一個容器啟東時要執行的命令Dockerfile中可以有多個CMD指令,單隻有最後一個生效,CMD會被docker run之後的引數替換
入口點 指定一個容器啟動時要執行的命令ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程式及引數
ONBUILD 當構建一個被繼承的Dockfile時執行命令,父映象再被子整合後父映象的onbuild被觸發

構建一個安裝VIM和網路工具的CentOS的

FROM centos
#作者名稱和郵箱
MAINTAINER xdp<[email protected]>
#環境變數
ENV MYPATH /usr/local
#進入容器後的你目錄
WORKDIR $MYPATH
#執行安裝命令
RUN yum -y install vim
RUN yum -y install net-tools
#對外暴露80埠
EXPOSE 80

CMD echo $MYPATH
CMD echo "success_______________________"
CMD /bin/bash

CMD和入口點

兩個都是設定啟動容器時候要執行的命令,

但是當有多條命令時候,

CMD是覆蓋,

入口點是追加。

用CMD構建

FROM centos

#執行安裝命令
RUN yum -y install curl

CMD ["curl","-s","http://ip.cn"]

輸入 

docker run -it myip:1.0 

執行結果正確

輸入 

docker run -it myip:1.0 -i

執行結果錯誤

用入口點構建

FROM centos

#執行安裝命令
RUN yum -y install curl

ENTRYPOINT ["curl","-s","http://ip.cn"]

輸入 

docker run -it myip:1.0 

執行結果正確

輸入 

docker run -it myip:1.0 -i

執行結果多顯示出響應頭

ONBUILD

當有映象繼承改映象,就好觸發RUN echo“extends farher image !!!!”事件

FROM centos

RUN yum -y install curl

ENTRYPOINT ["curl","-s","http://ip.cn"]

ONBUILD RUN echo "extends farher image!!!!“

自定義tomcat