Dockerfile常用指令介紹


Dockerfile常用指令簡介

編號

指令

作用

示例

備注

1 FROM 構建的鏡像是基於哪個鏡像 FROM centos:7 tag是可選的

2

MAINTAINER 鏡像維護者姓名或郵箱地址

MAINTAINER yang 或
MAINTAINER yang@163.com

 -
3 LABEL 鏡像的屬性標簽,一般放到第三行 LABEL version=“1.0” 為了查看,docker inspect 容器名,並沒有實質性的作用
 4  RUN  制作鏡像過程中需要的執行命令(安裝服務)  

RUN yum -y install nginx 或
RUN [ "yum","install","nginx" ]

 RUN 指令:用於指定 docker build 過程中要運行的命令,可以寫多條
 5  CMD 容器啟動的時候執行的初始命令,容易被替換(啟動服務)  CMD [ "-c","/start.sh" ] 或

CMD [ "/usr/sbin/sshd","-D" ] 或
CMD /usr/sbin/sshd -D

 1.CMD和ENTRYPOINT在運行容器時運行,只能寫一條,如果是寫多條,最后一條生效

2.CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。

 6  EXPOSE  鏡像內部暴漏的服務端口  EXPOSE 80 443  可以指定多個端口,默認tcp協議
 7  ARG  和ENV類似  ARG A=19

1.和ENV類似,但是在build,啟動容器的時候就會失效,除非在build的時候特意指定,如:docker build -t nginx --build-arg A=19 .   (--build-arg A=19會臨時修Dockerfile中配置的ARG參數)

2.ARG是一個構建參數,只有在構建(docker build -t )的時候才會生效,真正運行的時候就無效了

 8  ENV  設置容器內環境變量  ENV MYSQL_PASSWORD 123456

1. 如果ARG和ENV同時使用,操作如下:ARG A=19 \  ENV B $A  ,這樣在build出來的鏡像,會通過ENV打印出ARG的參數信息

2.ENV從構建時到運行時,會一直有效的環境變量,永遠不會失效

 9  ADD  將Dockerfile當前目錄下的文件或目錄拷貝到鏡像中,如果是url或壓縮包會自動下載  

語法:
ADD <源目錄或文件>…<目標目錄或文件>
ADD [ "<src>",… "<dest>" ]
ADD hom* /mydir/
ADD https://xxx.com/html.tar.gz /var/www/html
ADD html.tar.gz /var/www/html

 支持curl格式,如果是內部網絡的話,推薦使用COPY,將下載下來的tar包會自動解壓,然后刪除下載下來的壓縮包文件,減少了占用的空間
 10  COPY  將Dockerfile當前目錄下的文件拷貝到鏡像中  COPY index.html /usr/nginx/html/  不自動解壓tar包
 11  ENTRYPOINT   容器啟動的時候執行的初始命令,不能被替換  

ENTRYPOINT [ "/bin/bash","-c","/start.sh" ]
ENTRYPOINT /bin/bash -c '/start.sh'

 1.ENTRYPOINT類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,如果運行 docker run 時使用了 --entrypoint 選項,

此選項的參數可當作要運行的程序覆蓋 ENTRYPOINT 指令指定的程序;

2. 容器啟動的時候執行的初始命令,不能被替換,如果同時使用CMD和ENTRYPOINT,cmd命令將作為ENTRYPOINT參數,就是拼接到一起使用 

 12  VOLUME  指定容器掛載點到宿主機自動生成的目錄或其他容器  VOLUME [ "/var/lib/mysql" ]

1.該指令使容器中的一個目錄具有持久化存儲功能,該目錄可被容器本身使用,也可以共享給其它容器

2.當容器中的應用有持久化數據的需求時可以在 Dockerfile 中使用該指令

 13  USER  為RUN、CMD、ENTRYPOINT執行命令指定運行用戶  

USER <user>:<group> 或 <UID>:<GID>
USER yang

 鏡像構建完成后,通過docker run運行容器時,可以通過-u參數來覆蓋所指定的用戶。
 14  WORKDIR  為RUN、CMD、ENTRYPOINT、COPY、ADD設置工作目錄  WORKDIR /usr/local/nginx  如果目錄不存在,就會自動創建目錄
 15  ONBULD  當前鏡像構建的時候不會執行,基於當前鏡像構建的鏡像才會執行  

ONBUILD RUN mkdir app
示例:
Dockerfile1
FROM ubuntu
ONBUILD RUN mkdir app
docker build -t image1 .
docker run --name ct1 -it image1 /bin/bash
創建容器后發現未生成文件夾app
Dockerfile2
FROM image1
docker build -t image2 .
docker run --name ct2 -it image2 /bin/bash
創建容器ct2的時候,RUN mkdir app執行,文件夾app生成

 在使用ONBUILD命令時,其后面跟着的其他命令在當前鏡像構建時不會被執行,以其為基礎鏡像源,構建下級鏡像源時才會執行
 16  HEALTHCHECK  檢查容器健康狀態  HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ ||exit 1  

1.interval:間隔(s秒、m分鍾、h小時),從容器運行起來開始計時interval秒(或者分鍾小時)進行第一次健康檢查,隨后每間隔interval秒進行一次健康檢查;
2.timeout:執行command需要時間,比如curl 一個地址,如果超過timeout秒則認為超時是錯誤的狀態,此時每次健康檢查的時間是timeout+interval秒。
3.注意:在Dockerfile中只能有一個HEALTHCHECK指令。如果您列出多個,則只有最后一個HEALTHCHECK將生效。

 17  STOPSIGNAL  指定當前的容器使用什么信號  STOPSIGNAL signal  一般很少使用指令設置將被發送到容器退出的系統調用信號。該信號可以是與內核 syscall 表中的位置匹配的有效無符號數字(例如9),也可以是 SIGNAME 格式的信號名稱(例如 SIGKILL)。
 18 SHELL   當前鏡像中使用的是哪種shell,一般Linux默認是/bin/sh(如果想修改,可以改成/bin/bash),而在Windows上[“cmd”, “/S”, “/C”]。  

SHELL [“powershell”, “-command”]
SHELL /bin/sh

 

1.SHELL指令必須以JSON格式寫入Dockerfile
2.SHELL指令可以多次出現。每條SHELL指令都會覆蓋所有先前的       SHELL指令,並影響所有后續指令

 

 

 以上,如有需要補充了,大家請指出~~~~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM