Docker 實踐 05 使用Dockerfile定製鏡像

鏡像的定製實際上就是定製每一層所添加的配置、文件。我們可以把每一層修改、安裝、構建、操作的命令都寫入一個腳本,這個腳本就是 Dockerfile。Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

Dockerfile命令詳解

FROM 

就是指定基礎鏡像,是必備的指令,並且必須是第一條指令。
官方基礎鏡像類型:
  •     服務類的鏡像:如 nginx、redis、mongo、mysql、httpd、php、tomcat 等;
  •     語言應用的鏡像:如 node、openjdk、python、ruby、golang 等。
  •     操作系統鏡像,如 ubuntu、debian、centos、fedora、alpine 等。
  •     scratch,這個鏡像是虛擬的概念,並不實際存在,它表示一個空白的鏡像。

RUN 

指令是用來執行命令行命令的。

shell 格式:RUN <命令>,就像直接在命令行中輸入的命令一樣。剛纔寫的 Dockerfile 中的 RUN 指令就是這種格式。

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

exec 格式:RUN ["可執行文件", "參數1", "參數2"],這更像是函數調用中的格式。

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
    && apt-get update \
    && apt-get install -y $buildDeps \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
    && mkdir -p /usr/src/redis \
    && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
    && make -C /usr/src/redis \
    && make -C /usr/src/redis install \
    && rm -rf /var/lib/apt/lists/* \
    && rm redis.tar.gz \
    && rm -r /usr/src/redis \
    && apt-get purge -y --auto-remove $buildDeps
注意:
1)使用一個 RUN 指令,並使用 && 將各個所需命令串聯起來,簡化爲了 1 層。
2)支持 Shell 類的行尾添加 \ 的命令換行方式,以及行首 # 進行註釋的格式。良好的格式,比如換行、縮進、註釋等,會讓維護、排障更爲容易。

3)命令的最後添加清理工作的命令,刪除了爲了編譯構建所需要的軟件,清理了所有下載、展開的、apt 緩存文件,確保每一層只添加真正需要添加的東西,清理任何無關的東西。

鏡像構建

在 Dockerfile 文件所在目錄執行:
$ docker build -t nginx:v3 .
發佈了43 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章