Dockerfile語法梳理及實踐
一、Dockerfile中的關鍵字
1.FROM
用於Dockerfile文件的最開始,標識這個鏡像基於哪個BaseImage。
FROM scratch # 製作Base Image
FROM ubuntu:14.04 # 基於ubuntu:14.04
- 爲了安全,儘量使用官方的BaseImage
2.LABEL
用於描述這個Image的一些信息,例如作者、版本等等。可以理解爲寫代碼中的註釋的作用。
LABEL maintainer="[email protected]"
LABEL version="v1.0"
LABEL description="ubuntu:14.04 & vim"
- 爲了讓大家瞭解到這個Image的情況,LABEL必不可少
3.RUN
基於FROM關鍵字指定的BaseImage創建臨時容器後,指定執行的命令。
- 每一個RUN關鍵字都會變成Image中的一層。例如之前安裝vim,先寫RUN apt-get update,再寫RUN apt-get install -y vim,這樣只是爲了安裝一個Vim,卻分了兩層
- 爲了避免無用的分層,多條命令用 && 合併成一條RUN
- 爲了美觀,複雜的RUN用 \ 換行
## 使用&&將多條命令合併
RUN apt-get update && apt-get install vim
## 注意使用apt-get安裝清理緩存
RUN apt-get update && apt-get install vim && rm \
-rf /var/lib/apt/lists/*
4.WORKDIR
設定當前工作目錄(在鏡像中),可以理解爲cd命令。
FORM ...
LABEL ...
WORKDIR /test # 若此時在臨時容器中無此目錄,則會自動創建
WORKDOR demo
RUN pwd # 會輸出:/test/demo
- 雖然使用RUN cd /test 也能達到相同的效果,但是不推薦,請使用WORKDIR命令。
- 儘量使用絕對目錄,更清晰。
5.ADD和COPY
將本地的文件添加到鏡像裏面。
# ADD命令添加之後會將文件解壓
ADD test.tar.gz / # 添加到鏡像中: /test
# COPY命令只會添加,不會解壓
WORKDIR /root
COPY test.txt test # 添加到鏡像中: /root/test/test.txt
- 因爲ADD多了一個解壓功能,所以一般使用COPY命令。
- 用於添加本地文件,如果需要下載遠程文件到鏡像中,使用RUN curl或者RUN wget命令下載。
6.ENV
設定一個環境變量,Dockerfile中後面的信息可以取這個變量的值使用。
ENV MYSQL_VERSION 5.6
RUN apt-get install -y mysql-server= "${MYSQL_VERSION}"
- 多使用ENV可以增加Dockfile的可維護性
7.VOLUME和EXPOSE
用於存儲和網絡。
8.CMD和ENTRYPOINT
內容較多,下篇博客。
二、官方的Dockerfile示例
https://github.com/docker-library
以上github的倉庫包含:官方提供的很多鏡像的Dockfile
三、官方說明文檔
https://docs.docker.com/engine/reference/builder/