dockerfile指令

Dockerfile指令詳解

Dockerfile中包括FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD等13個指令。下面一一講解。

1.FROM
格式爲FROM image或FROM image:tag,並且Dockerfile中第一條指令必須是FROM指令,且在同一個Dockerfile中創建多個鏡像時,可以使用多個FROM指令。

2.MAINTAINER
格式爲MAINTAINER user_name user_email,指定維護者信息

3.RUN
格式爲RUN command或 RUN ["EXECUTABLE","PARAM1","PARAM2".....],前者在shell終端中運行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";後者使用exec執行,指定其他運行終端使用RUN["/bin/bash","-c","echo hello"]

每條RUN指令將當前的鏡像基礎上執行指令,並提交爲新的鏡像,命令較長的時候可以使用\來換行。

4.CMD
支持三種格式:
CMD ["executable","param1","param2"],使用exec執行,這是推薦的方式。
CMD command param1 param2 在/bin/sh中執行。
CMD ["param1","param2"] 提供給ENTERYPOINT的默認參數。
CMD用於指定容器啓動時執行的命令,每個Dockerfile只能有一個CMD命令,多個CMD命令只執行最後一個。若容器啓動時指定了運行的命令,則會覆蓋掉CMD中指定的命令。

5.EXPOSE
格式爲 EXPOSE port [port2,port3,...],例如EXPOSE 80這條指令告訴Docker服務器暴露80端口,供容器外部連接使用。
在啓動容器的使用使用-P,Docker會自動分配一個端口和轉發指定的端口,使用-p可以具體指定使用哪個本地的端口來映射對外開放的端口。

6.ENV
格式爲:EVN key value 。用於指定環境變量,這些環境變量,後續可以被RUN指令使用,容器運行起來之後,也可以在容器中獲取這些環境變量。
例如
ENV word hello
RUN echo $word

7.ADD
格式:ADD src dest
該命令將複製指定本地目錄中的文件到容器中的dest中,src可以是是一個絕對路徑,也可以是一個URL或一個tar文件,tar文件會自動解壓爲目錄。

8.COPY
格式爲:COPY src desc
複製本地主機src目錄或文件到容器的desc目錄,desc不存在時會自動創建。

9.ENTRYPOINT
格式有兩種:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2 會在shell中執行。
用於配置容器啓動後執行的命令,這些命令不能被docker run提供的參數覆蓋。和CMD一樣,每個Dockerfile中只能有一個ENTRYPOINT,當有多個時最後一個生效。

10.VOLUME
格式爲 VOLUME ["/data"]
作用是創建在本地主機或其他容器可以掛載的數據卷,用來存放數據。

11.USER
格式爲:USER username
指定容器運行時的用戶名或UID,後續的RUN也會使用指定的用戶。要臨時使用管理員權限可以使用sudo。在USER命令之前可以使用RUN命令創建需要的用戶。
例如:RUN groupadd -r docker && useradd -r -g docker docker

12.WORKDIR
格式: WORKDIR /path
爲後續的RUN CMD ENTRYPOINT指定配置工作目錄,可以使用多個WORKDIR指令,若後續指令用得是相對路徑,則會基於之前的命令指定路徑。

13.ONBUILD
格式ONBUILD [INSTRUCTION]
該配置指定當所創建的鏡像作爲其他新建鏡像的基礎鏡像時所執行的指令。
例如下面的Dockerfile創建了鏡像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py

則基於鏡像A創建新的鏡像時,新的Dockerfile中使用from A 指定基鏡像時,會自動執行ONBBUILD指令內容,等價於在新的要構建鏡像的Dockerfile中增加了兩條指令:
FROM A
ADD ./app
RUN python app.py

14.docker build
創建好Dockerfile之後,通過docker build命令來創建鏡像,該命令首先會上傳Dockerfile文件給Docker服務器端,服務器端將逐行執行Dockerfile中定義的指令。
通常建議放置Dockerfile的目錄爲空目錄。另外可以在目錄下創建.dockerignore文件,讓Docker忽略路徑下的文件和目錄,這一點與Git中的配置很相似。

通過 -t 指定鏡像的標籤信息,例如:docker build -t regenzm/first_image . ##"."指定的是Dockerfile所在的路徑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章