Docker:Dockerfile常用指令

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章