Dockerfile基礎指令詳解

一、基礎指令

FROM

  • 格式:
FROM <image>
FROM <image>:<tag>
  • 解釋:
    FROMDockerfile裏的第一條而且只能是除了首行註釋之外的第一條指令。

MAINTAINER

  • 格式:
MAINTAINER <name>
  • 解釋:
    指定該Dockerfile文件的維護者信息。類似我們在docker commit時候使用-a參數指定的信息。

RUN

  • 格式:
RUN <command>  # shell模式
RUN["executable", "param1", "param2"]  # exec模式
  • 解釋:
    表示當前鏡像構建時候運行的命令
  • 註釋:
    • shell模式:類似於 /bin/bash -c command
      舉例:RUN echo hello
    • exec模式:類似於 RUN ["/bin/bash", "-c", "command"]
      舉例:RUN ["echo", "hello"]

EXPOSE

  • 格式:
EXPOSE <port> [<port>...]
  • 解釋:
    設置Docker容器對外暴露的端口號,Docker爲了安全,不會自動對外打開端口,如果需要外部提供訪問,還需要啓動容器時增加-p或者-P參數對容器的端口進行分配。

ENTRYPOINT

  • 格式:
ENTRYPOINT ["executable", "param1","param2"]  # exec 模式
ENTRYPOINT command param1 param2  # shell模式
  • 解釋:
    容器啓動時執行的指令,每個Dockerfile中只能有一個ENTRYPOINT,當指定多個時,只有最後一個起效。

二、文件編輯指令

這一節,我們從指令詳解、ADD實踐、COPY實踐、VOLUME實踐這四個方面來學習。
注意:

  • ADDCOPY相當於數據卷操作;
  • VOLUME相當於數據卷容器操作。

ADD

  • 格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
  • 解釋:
    將指定的 <src>文件複製到容器文件系統中的 <dest>
    src指的是宿主機,dest指的是容器
    如果源文件是個壓縮文件,則docker會自動幫解壓到指定的容器中(無論目標是文件還是目錄,都會當成目錄處理)。

COPY

  • 格式:
COPY <src>... <dest>
COPY ["<src>",... "<dest>"]
  • 解釋:
    單純複製文件場景,Docker推薦使用COPY

VOLUME

  • 格式:
VOLUME ["/data"]
  • 解釋:
    VOLUME指令可以在鏡像中創建掛載點,這樣只要通過該鏡像創建的容器都有了掛載點,通過VOLUME指令創建的掛載點,無法指定主機上對應的目錄,是自動生成的。
    舉例:
    VOLUME ["/var/lib/tomcat7/webapps/"]
ADD實踐
  • 拷貝普通文件,Dockerfile文件內容:
......
# 執行命令
......
# 增加文件
ADD ["sources.list","/etc/apt/sources.list"]
......
  • 拷貝壓縮文件,Dockerfile文件內容:
......
# 執行命令
......
# 增加文件
ADD ["linshi.tar.gz","/nihao/"]
......
COPY實踐
  • 修改Dockerfile文件內容:
......
# 執行命令
......
# 增加文件
COPY index.html /var/www/html/
......
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
VOLUME實踐

修改Dockerfile文件內容:

# 在上一個Dockerfile文件內容基礎上,在COPY下面增加一個VOLUME
VOLUME ["/data/"]
......

三、環境指令詳解

這一節,我們從指令詳解、ENV實踐、WORKDIR實踐這三個方面來學習。

ENV

  • 格式:
ENV <key> <value>
ENV <key>=<value>
  • 解釋:
    設置環境變量,可以在RUN之前使用,然後RUN命令時調用,容器啓動時這些環境變量都會被指定.

WORKDIR

  • 格式:
WORKDIR /path/to/workdir  # shell模式
  • 解釋:
    切換目錄,爲後續的RUNCMDENTRYPOINT指令配置工作目錄。 相當於cd
    可以多次切換(相當於cd命令),
    也可以使用多個WORKDIR指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑。例如
    舉例:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 則最終路徑爲 /a/b/c。
ENV實踐
  • 修改Dockerfile文件內容:
# 在上一個Dockerfile文件內容基礎上,在RUN下面增加一個ENV
ENV NIHAO=helloworld
WORKDIR實踐
  • 修改Dockerfile文件內容:
# 在上一個Dockerfile文件內容基礎上,在RUN下面增加一個WORKDIR
WORKDIR /nihao/GuiYiHuShen/
RUN ["touch","GuiYiHuShen.txt"]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章