Docker技術三——DockerFile檔案
阿新 • • 發佈:2018-12-01
什麼是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的語法
- 所有保留字必須大寫且後面必須有引數
- 從上到下執行
- #表示註釋
- 每條執行都會產生一個新的映象層,並且對映象進行提交
DockerFile的解析過程
- 先從基礎映象執行一個容器
- 執行一條指令對容器進行修改
- 通過類似於docker commit的方式製作一個新的映象
- 再用新的映象執行一個新的容器
- 繼續執行一條指令直到所有的指令執行完畢
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