Docker學習及DevOps實踐:4.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/

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