Dockerfile的語法格式以下git
# 註釋 命令 參數
其中,<命令>是不區分大小寫的。但爲了同後面的參數區分開來,一般寫成大寫字母。docker
在Dockerfile中,以#開頭的行是註釋。註釋不會影響docker build的執行過程。ssh
註釋中若是出現格式爲ui
# directive=value
的內容,會被看成指示進行處理。spa
escape指示的用法爲進程
# escape=\
或開發
# escape=`
部分指令支持在參數中使用環境變量。環境變量的語法格式以下:get
$variable_name
${variable_name}
環境變量支持一些變形用法,如jenkins
${variable:-word} # 若是variable已設置,表達式以variable爲結果,不然表達式以word爲結果。
和dockerfile
${variable:+word} # 若是變量variable已設置,表達式以word爲結果。
支持環境變量的命令有
ADD COPY ENV EXPOSE LABEL USER WORKDIR VOLUME STOPSIGNAL
在使用docker build構建鏡像時,docker會將工做目錄(包括其中的文件和子目錄)做爲context發送給構建進程。對於構建過程當中不會被用到的文件,能夠把這些文件的名字寫在.dockerfile文件中,以加速構建過程。 dockerignore文件中每一個文件名佔一行,並支持通配符,如
*~ */*/temp/* temp?
Dockerfile的第一個命令必須是FROM。FROM命令用於定義基準鏡像。後續一切命令都是在基準鏡像上進行操做。 FROM命令的用法爲
FROM <image>[:<tag>]
或
FROM <image>@<digest>
MAINTAINER指令指明瞭Dockerfile的維護者。MAINTAINER命令的用法爲
MAINTAINER <name>
RUN命令用於在基礎鏡像中執行程序。RUN命令的語法爲
RUN <command>
或
RUN ["executable", "param1", "param2"]
CMD命令用於爲可執行容器指定默認行爲。CMD指令在一個Dockerfile中最多出現一次,其語法爲
CMD ["executable", "param1", "param2"]
或
CMD ["param1", "param2"] # 以param一、param2爲參數執行ENTRYPOINT
或
CMD command param1 param2
LABEL命令爲鏡像增長一組鍵值對做爲元信息。
LABEL <key>=<value> <key2>=<value2>
EXPOSE命令告訴docker容器須要監聽指定的端口。
EXPOSE <port> [<port>...]
ENV命令用於設置環境變量。
ENV <key> <value> ENV <key>=<value>
複製文件、目錄或URL。
ADD <src>... <dest>
複製文件、目錄或URL。
COPY <src>... <dest>
ENTRYPOINT定義了容器運行的程序。
ENTRYPOINT command param1 param2
VOLUME命令將外部存儲掛載爲容器內的目錄。
VOLUME ["/data"]
設置執行RUN/CMD/ENTRYPOINT命令時使用的用戶。
USER <username_or_userid>
設置執行RUN/CMD/ENTRYPOINT命令時使用目錄。
WORKDIR <path/to/work/directory>
設置構建期參數。
ARG <name>[=<default value>]
FROM alpine MAINTAINER Wang Qian VOLUME ["/home/git", "/data/repo"] RUN apk update RUN apk add go RUN apk add make RUN apk jenkins RUN apk git RUN apk openssh RUN addgroup git RUN adduser -h /home/git -s /bin/false -S -G git git CMD /bin/sh