一、簡介
- 基礎鏡像資訊
- 維護者資訊
- 鏡像操作指令
- 容器啟執行指令
示例:
#apache:centos 鏡像的名稱
#VERSION 0.0.1 鏡像的版本
#Command format: Instruction [arguments / command] ..
#第一行必須指定基于的基礎鏡像
FROM ssh:centos
#維護者資訊
MAINTAINER docker_user XX
#設定環境變量,所有操作都是非互動式的
ENV DEBIAN_FRONTEND noninteractive
#鏡像的操作指令
RUN yum install httpd -y
#添加本地腳本到鏡像的跟目錄下
ADD run.sh /run.sh
#修改腳本檔案的可執行權限
RUN chmod 755 /*.sh
#鏡像容器啟動時堆外暴露的端口号
EXPOSE 80
#容器啟動後的工作目錄
WORKDIR /app
#容器啟動時執行指令
CMD /run.sh
一開始必須指明所基于的鏡像名稱,接下來一般會說明維護者資訊。RUN指令将鏡像執行跟随的指令。沒運作RUN指令,鏡像添加新的一層,并送出。最後CMD指令來指定容器時的操作指令。
二、指令
指令的一般格式為INSTRUCTION arguments,指令包括FROM、MAINTAINER、RUN等。
-
FORM
格式FROM 或者FROM:
第一條指令必須為FROM指令。并且,如果在同一個Dockerfile中建立多個鏡像時,可以使用多個FROM指令。
-
MAINTAINER
格式為 MAINTAINER ,指定維護者資訊。
-
RUN
格式為RUN 或RUN [“executable”,“param1”,“param2”]。
前者将在shell終端中運作指令,即/bin/sh -c ;後者則使用exec執行。指定使用其他終端可以通過第二種方式實作,例如RUN["/bin/bash","-c" ,“echo hello”]。
每條URN指令将在目前鏡像基礎上執行指定指令,并送出為新的鏡像。當指令較長時可以使用 \ 來換行。
-
CMD
支援三種格式:
- CMD [“executable”,“param1”,“param2”] 使用exec 執行,推薦方式。
- CMD command param1 param2 在/bin/sh 中執行,提供給需要互動的應用。
-
CMD [“param1”,“param2”] 提供給ENTRYPOINT的預設參數。
指定啟動容器時執行的指令,每個Dockerfile隻能有一條CMD指令。如果指定了多條指令,隻有最後一條會被執行。
如果使用者啟動容器時候指定了運作的指令,則會覆寫CMD指定的指令。
-
EXPOSE
格式為EXPOSE [ …]
告訴Docker服務端容器暴露的端口号,供互聯系統使用。在啟動容器時需要通過-P,Docker主機會自動配置設定一個端口轉發到指定的端口;使用-p,則可以具體指定那個本地端口映射過來。
-
ENV
格式ENV 。指定一個環境變量,會被後續RUN指令使用,并在容器運作時保持。
ENV PATH /usr/local/
-
ADD
格式為ADD
該指令将複制指定的 到容器中的 .其中可以是Dockerfile所在目錄的一個相對路徑(檔案或目錄);也可以是一個URL;還可以是一個tar檔案(自動解壓為目錄)
-
COPY
格式為COPY 。
複制本地主機 (為Dockerfile所在目錄的相對路徑,檔案或目錄)為容器中的 。 目标路徑不存在時,會自動建立。當使用本地目錄為源目錄時,推薦使用COPY。
-
ENTRYPOINT
有兩種格式:
- ENTRYPOINT [“executable”,“param1”,“param2”]
-
ENTRYPOINT command param1 param2 (shell中執行)
配置容器啟動後執行的指令,并且不可被docker run 提供的參數覆寫。
每個Docker中隻能有一個ENTRYPOINT,當指定多個時會被覆寫最後一個生效。
-
VOLUME
格式為VOLUME ["/data"]
建立一個可以從本地主機或其他容器挂載點,一般用來存放資料庫和需要儲存的資料等。
-
USER
格式為USER daemon。
指定運作容器時的使用者名或者UID,後續的RUN也會使用指定使用者。
當服務不需要管理者權限時,可以通過該指令指定運作使用者。并且可以在之前建立所需要的使用者,例如:RUN groupadd -r postgres && useradd -r -g postgres。要臨時擷取管理者權限可以使用gosu,而不推薦sudo。
-
WORKDIR
格式為WORKDIR /path/to/workdir
為後續的RUN、CMD、ENTRYPOINT指令配置工作目錄。
可以使用多個WORKDIR指令,後續指令如果參數是相對路徑,則會基于之前指令指定的路徑。
-
ONBUID
格式為ONBUID [INSTRUCTION]
配置當所建立的鏡像作為其他新建立鏡像的基礎鏡像時,所執行的操作指令。
三、根據編寫的dockerfile檔案建立鏡像
docker build -t buid_image /dockerfiledir