一、基礎指令
FROM
- 格式:
FROM <image>
FROM <image>:<tag>
- 解釋:
FROM
是Dockerfile
裏的第一條而且只能是除了首行註釋之外的第一條指令。
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
實踐這四個方面來學習。
注意:
ADD
和COPY
相當於數據卷操作;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模式
- 解釋:
切換目錄,爲後續的RUN
、CMD
、ENTRYPOINT
指令配置工作目錄。 相當於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"]