Dockerfile常用指令簡介
編號 |
指令 |
作用 |
示例 |
備注 |
1 | FROM | 構建的鏡像是基於哪個鏡像 | FROM centos:7 | tag是可選的 |
2 |
MAINTAINER | 鏡像維護者姓名或郵箱地址 | MAINTAINER yang 或 |
- |
3 | LABEL | 鏡像的屬性標簽,一般放到第三行 | LABEL version=“1.0” | 為了查看,docker inspect 容器名,並沒有實質性的作用 |
4 | RUN | 制作鏡像過程中需要的執行命令(安裝服務) | RUN yum -y install nginx 或 |
RUN 指令:用於指定 docker build 過程中要運行的命令,可以寫多條 |
5 | CMD | 容器啟動的時候執行的初始命令,容易被替換(啟動服務) | CMD [ "-c","/start.sh" ] 或 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或壓縮包會自動下載 | 語法: |
支持curl格式,如果是內部網絡的話,推薦使用COPY,將下載下來的tar包會自動解壓,然后刪除下載下來的壓縮包文件,減少了占用的空間。 |
10 | COPY | 將Dockerfile當前目錄下的文件拷貝到鏡像中 | COPY index.html /usr/nginx/html/ | 不自動解壓tar包 |
11 | ENTRYPOINT | 容器啟動的時候執行的初始命令,不能被替換 | 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> |
鏡像構建完成后,通過docker run運行容器時,可以通過-u參數來覆蓋所指定的用戶。 |
14 | WORKDIR | 為RUN、CMD、ENTRYPOINT、COPY、ADD設置工作目錄 | WORKDIR /usr/local/nginx | 如果目錄不存在,就會自動創建目錄 |
15 | ONBULD | 當前鏡像構建的時候不會執行,基於當前鏡像構建的鏡像才會執行 | ONBUILD RUN mkdir app |
在使用ONBUILD命令時,其后面跟着的其他命令在當前鏡像構建時不會被執行,以其為基礎鏡像源,構建下級鏡像源時才會執行 |
16 | HEALTHCHECK | 檢查容器健康狀態 | HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ ||exit 1 | 1.interval:間隔(s秒、m分鍾、h小時),從容器運行起來開始計時interval秒(或者分鍾小時)進行第一次健康檢查,隨后每間隔interval秒進行一次健康檢查; |
17 | STOPSIGNAL | 指定當前的容器使用什么信號 | STOPSIGNAL signal | 一般很少使用指令設置將被發送到容器退出的系統調用信號。該信號可以是與內核 syscall 表中的位置匹配的有效無符號數字(例如9),也可以是 SIGNAME 格式的信號名稱(例如 SIGKILL)。 |
18 | SHELL | 當前鏡像中使用的是哪種shell,一般Linux默認是/bin/sh(如果想修改,可以改成/bin/bash),而在Windows上[“cmd”, “/S”, “/C”]。 | SHELL [“powershell”, “-command”] |
1.SHELL指令必須以JSON格式寫入Dockerfile |
以上,如有需要補充了,大家請指出~~~~~~