天天看點

DockerFile檔案的基本結構與指令

一、簡介

  1. 基礎鏡像資訊
  2. 維護者資訊
  3. 鏡像操作指令
  4. 容器啟執行指令

示例:

#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等。

  1. FORM

    格式FROM 或者FROM:

    第一條指令必須為FROM指令。并且,如果在同一個Dockerfile中建立多個鏡像時,可以使用多個FROM指令。

  2. MAINTAINER

    格式為 MAINTAINER ,指定維護者資訊。

  3. RUN

    格式為RUN 或RUN [“executable”,“param1”,“param2”]。

    前者将在shell終端中運作指令,即/bin/sh -c ;後者則使用exec執行。指定使用其他終端可以通過第二種方式實作,例如RUN["/bin/bash","-c" ,“echo hello”]。

    每條URN指令将在目前鏡像基礎上執行指定指令,并送出為新的鏡像。當指令較長時可以使用 \ 來換行。

  4. CMD

    支援三種格式:

  • CMD [“executable”,“param1”,“param2”] 使用exec 執行,推薦方式。
  • CMD command param1 param2 在/bin/sh 中執行,提供給需要互動的應用。
  • CMD [“param1”,“param2”] 提供給ENTRYPOINT的預設參數。

    指定啟動容器時執行的指令,每個Dockerfile隻能有一條CMD指令。如果指定了多條指令,隻有最後一條會被執行。

    如果使用者啟動容器時候指定了運作的指令,則會覆寫CMD指定的指令。

  1. EXPOSE

    格式為EXPOSE [ …]

    告訴Docker服務端容器暴露的端口号,供互聯系統使用。在啟動容器時需要通過-P,Docker主機會自動配置設定一個端口轉發到指定的端口;使用-p,則可以具體指定那個本地端口映射過來。

  2. ENV

    格式ENV 。指定一個環境變量,會被後續RUN指令使用,并在容器運作時保持。

    ENV PATH /usr/local/

  3. ADD

    格式為ADD

    該指令将複制指定的 到容器中的 .其中可以是Dockerfile所在目錄的一個相對路徑(檔案或目錄);也可以是一個URL;還可以是一個tar檔案(自動解壓為目錄)

  4. COPY

    格式為COPY 。

    複制本地主機 (為Dockerfile所在目錄的相對路徑,檔案或目錄)為容器中的 。 目标路徑不存在時,會自動建立。當使用本地目錄為源目錄時,推薦使用COPY。

  5. ENTRYPOINT

    有兩種格式:

  • ENTRYPOINT [“executable”,“param1”,“param2”]
  • ENTRYPOINT command param1 param2 (shell中執行)

    配置容器啟動後執行的指令,并且不可被docker run 提供的參數覆寫。

    每個Docker中隻能有一個ENTRYPOINT,當指定多個時會被覆寫最後一個生效。

  1. VOLUME

    格式為VOLUME ["/data"]

    建立一個可以從本地主機或其他容器挂載點,一般用來存放資料庫和需要儲存的資料等。

  2. USER

    格式為USER daemon。

    指定運作容器時的使用者名或者UID,後續的RUN也會使用指定使用者。

    當服務不需要管理者權限時,可以通過該指令指定運作使用者。并且可以在之前建立所需要的使用者,例如:RUN groupadd -r postgres && useradd -r -g postgres。要臨時擷取管理者權限可以使用gosu,而不推薦sudo。

  3. WORKDIR

    格式為WORKDIR /path/to/workdir

    為後續的RUN、CMD、ENTRYPOINT指令配置工作目錄。

    可以使用多個WORKDIR指令,後續指令如果參數是相對路徑,則會基于之前指令指定的路徑。

  4. ONBUID

    格式為ONBUID [INSTRUCTION]

    配置當所建立的鏡像作為其他新建立鏡像的基礎鏡像時,所執行的操作指令。

三、根據編寫的dockerfile檔案建立鏡像

docker build -t buid_image /dockerfiledir