Dockerfile分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行指令
#指明鏡像名稱
FROM ubuntu
#維護者資訊
MAINTAINER docker_user
#鏡像操作指令
#格式為RUN <command>或RUN ["executable","param1","param2"]
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN apt-get update && apt-get install -y nginx
#CMD指令,來指定運作容器時的操作指令
#3種格式:
#CMD ["executable","param1","param2"]使用exec執行
#CMD command param1 param2 在/bin/sh中執行,需要提供給互動的應用
#CMD ["param1","param2"]提供給ENTRYPOINT的預設參數
CMD /user/sbin/nginx
指定啟動容器時執行的指令,每個Dockerfile隻能有一條CMD,若指定了多條隻有最後一條被執行
附加指令:
EXPOSE
格式:EXPOSE <port> [<port>...]
告訴Docker伺服器容器暴露的端口号,供網際網路系統使用。在啟動容器時需要通過-P,Docker主機會自動配置設定一個端口轉發到指定的端口
EMV
格式:EMV <key><value>,指定一個環境變量,會被後續RUN指令使用,并在容器運作時保持
ADD
格式:ADD <src> <dest>
該指令将複制指定的<src>到容器的<dest>。其中<src>可以是Dockerfile所在目錄的一個相對路徑,也可以是一個URL,還可以是一個tar檔案(自動解壓為目錄)
COPY
格式:COPY <src> <dest>
複制本地主機的<src>(為Dockerfile所在目錄的相對路徑)到容器中的<dest>
當使用本地目錄為源目錄時,推薦使用COPY
ENTRYPOINT
兩個格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2(shell中執行)
配置容器啟動後執行的指令,并且不可被docker run提供的參數覆寫
每個Dockerfile中隻能有一個ENTRYPOINT,當指定多個時,隻有最後一個起效
VOLUME
格式:VOLUME ["/data"]
建立一個可以從本地主機或其他容器挂載點,一般用來存放資料庫和需要儲存的資料
USER
格式為 USER daemon
指定運作容器時的使用者名或UID,後續的RUN也會使用指定使用者
WORKDIR
格式:WORKDIR /path/to/workdir
為後續的RUN、CMD、ENTRYPOINT指令配置工作目錄
可以使用多個WORKDIR指令,後續指令如果參數是相對路徑,則會基于指令制定的路徑。例如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
則最終路徑為/a/b/c
ONBUILD
格式:ONBUILD [INSTRUCTINO]
配置當所建立的鏡像作為其他新建立的基礎鏡像時,所執行的操作指令