天天看點

Dockerfile的編寫

Dockerfile分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行指令

#指明鏡像名稱

FROM ubuntu

#維護者資訊

MAINTAINER docker_user

​​[email protected]​​

#鏡像操作指令

#格式為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]

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

繼續閱讀