Dockerfile 創建鏡像必會知識點

一、.Dockerfile 結構
Dockerfile 由一行行命令語句組成,支持#開頭的註釋。Dockerfile的內容分爲四部分:基礎鏡像信息、維護者信息、鏡像操作指令、容器啓動時執行的指令。
下面是一個基於centos創建jdk鏡像的Dockerfile

# 第一行指定基於的基礎鏡像
FROM centos
#維護者信息
MAINTAINER test<test@163.com>
# 將文件添加到容器目錄
ADD server-jre-8u241-linux-x64.tar.gz /opt/
# 鏡像操作的指令
RUN chmod +x /opt/jdk1.8.0_172
#環境變量
ENV JAVA_HOME=/opt/jdk1.8.0_172
ENV PATH="$JAVA_HOME/bin:${PATH}
#
CMD echo " jdk container boot success "

二、Dockerfile 中的指令

指令包括FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD

1.FROM

格式爲: FROM <image> 或 FROM <image>: <tag>

Dockerfile中第一條指令必須爲FROM指令。如果在同一個Dockerfile文件中創建多個鏡像時,可以使用多個FROM指令
2. MAINTAINER

格式爲:MAINTAINER <name>,指定維護者信息

3.RUN

格式爲: RUN <command> 或 RUN ["executable","param1","param2"]

RUN command將在shell終端中運行命令,即/bin/sh-c,RUN [“executable”,“param1”,“param2”] 使用exec 執行。指定使用其他終端可以通過第二種方式實現。例:RUN[“/bin/bash”,"-c",“echo test”]
每條RUN 指令將在當前鏡像基礎上執行指定命令,並提交爲新的鏡像。爲了減少鏡像文件的大小,可以將要執行的命令都寫在同一個RUN中,使用\來換行。
4.CMD
格式有3種,分別爲:

CMD ["executable","param1","param2"] 使用exec執行
CMD command param1 param2 在/bin/sh 中執行,提供給需要交互的應用
CMD ["param1","param2"] 提供給ENTRYPOINT 的默認參數。

每個Dockerfile文件只能有一條CMD命令,如果有多條則只執行最後一條。如果啓動容器的時候指定了運行的命令,則會覆蓋CMD指定的命令。
5.EXPOSE

格式爲:EXPOSE <port> <port> <port>

指定容器要暴露的端口,供互聯繫統使用。
6.ENV

格式爲:ENV <key> <value>

用來指定環境變量,會被RUN指令使用,並在容器運行時保持。
7.ADD

格式爲:ADD <src> <dest>

將複製指定的src到容器中的dest,src可以是Dockerfile所在目錄的一個相對路徑(文件或目錄),也可以是一個URL或tar(會自動解壓tar)
8.COPY

格式爲:COPY <src> <dest>

複製本地主機的src(Dockerfile所在目錄的相對路徑,文件或目錄) 到容器中的dest,目標不存在時會自動創建。如果使用本地目錄爲源目錄時推薦使用COPY
9.ENTRYPOINT

格式有兩種:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell 中執行)

配置容器啓動後執行的命令,並且不可被docker run提供的參數覆蓋。每個Dockerfile中只能有一個ENTRYPOINT,當指定多個ENTRYPOINT,只有最後一個生效。
10.VOLUME

格式爲:VOLUME ["/data"]

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據庫。
11.USER

格式爲:USER daemon

指定運行容器是的用戶名或UID,後續的RUN也會使用指定用戶。當服務不需要管理員權限是,可以通過該指令指定運行用戶,並且可以在之前創建所需要的用戶,例:RUN groupadd-r postgres&&useradd-r-g postgres postgres
12.WORKDIR

格式爲:WORKDIR /path/to/workdir

位後續的RUN、CMD、ENTRYPOINT指令配置工作目錄,可以使用多個WORKDIR指令,後續的命令付過參數是相對路徑,則會基於之前命令指定的路徑。例:

WORKDIR test
WORKDIR docker
WORKDIR images
RUN pwd
則最終路徑爲/test/docker/images

13.ONBUILD

格式爲:ONBUILD [INSTRUCTION]

配置當所創建的鏡像爲其他新創建鏡像的基礎鏡像時執行的操作指令。
三、使用docker build命令創建鏡像

格式:docker build [選項] <路徑>(Dockerfile 文件所在的路徑)
docker build -t jdk /home/docker/images/jdk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章