FROM
指定base鏡像。格式形如:
FROM centos
RUN
在當前容器中執行指定命令並提交結果,生成的image用於下面的操作。格式形如:
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
CMD
容器啓動時執行指定的命令。格式形如:
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]
CMD
有三種格式:
-
CMD ["executable","param1","param2"](推薦) -
CMD ["param1","param2"] (作爲 ENTRYPOINT
的默認參數) -
CMD command param1 param2( shell
格式)
LABEL
LABEL
指令用於向鏡像添加元數據。LABEL是個鍵值對格式,如下:
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
LABEL multi.label1="value1" multi.label2="value2" other="value3"
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
構建鏡像時,鏡像會從base鏡像或者父鏡像繼承label,如果鏡像的label與上級鏡像衝突,則會出現label覆蓋。
MAINTAINER (已過時)
設置鏡像的作者。請使用LABEL
替代。
EXPOSE
EXPOSE 指令通知 Docker 容器在運行時監聽指定的網絡端口。 可以指定端口是監聽TCP還是UDP,如果不指定協議,默認爲TCP。格式形如:
EXPOSE 80/tcp
EXPOSE 80/udp
ENV
設置環境變量。格式形如:
舊的寫法
ENV JAVA_HOME /usr/local/jdk1.8.0_291
新的寫法
ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
MY_CAT=fluffy
COPY
將文件或目錄從build context
(宿主機上的文件夾)複製到容器的文件系統中。格式形如:
COPY test.txt /absoluteDir/
ADD
與COPY
類似,但是複製的文件如果是個壓縮包則會自動解壓到容器中,需要注意的是,是否會自動解壓縮取決於文件內容而不是文件的名字。
ENTRYPOINT
設置容器啓動時的命令。Dockerfile中可以有多個ENTRYPOINT
指令,但只有最後一個會生效CMD
或者docker run
之後的參數會被當作參數傳遞給ENTRYPOINT。ENTRYPOINT有兩種格式:
-
ENTRYPOINT ["executable", "param1", "param2"](推薦)。該格式特點: -
docker run
形式的參數可通過此格式傳遞給ENTRYPOINT
-
-
ENTRYPOINT command param1 param2。該格式特點: -
該形式的命令可以防止命令行傳遞參數 -
ENTRYPOINT將作爲 /bin/sh -c
的子命令啓動,導致不能收到從docker stop <container>
發來的SIGTERM
信號,也因此無法做到優雅關閉容器而被強殺進程。
-
使用方式形如:
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
ENTRYPOINT exec top -b