跳至主要內容

[docker] 使用 Dockerfile 定制鏡像

Dockerfile command:
Dockerfile command 說多不多,以下列出並加上簡短說明。
FROM:
base image 設定,你在 build image 時,一定需要指定一個 image 來源。
RUN:
build 時使用。會執行你的命令,然後 commit 結果,被 commit 的結果會被 Dockerfile 下一步驟所使用。
CMD:
run container 時要執行的命令,要注意這個跟 RUN 的區別,他是指當你使用 docker run  時,container 建立起來的時候要跑什麼樣的命令。另外一個 Dockerfile 內要有一個 CMD 或是等等會提到的 ENTRYPOINT。
LABEL:
標籤,會是以 key=value 的形式來定義。你可以用 LABEL 記錄一些 image 資訊,如版號、作者等等的訊息。官方建議用一個 LABEL 指令來定義多組值會比較有效率。
EXPOSE:
告訴 container 在執行時需要監聽哪個 port。注意,EXPOSE 並不是直接開放 port 給外界訪問,要讓外界訪問,你要在下 docker run 指令時加上 -p flag 才能讓外界訪問。
ENV:
環境變數設定。
ADD:
將檔案加到 images 內,檔案來源可以是 URL 或是 context 內的檔案。
COPY:
將檔案加到 images 內,檔案來源是 context 內的檔案,注意這個跟 ADD 的區別,上網查有人是說這個語意清楚,行為單純,就是複製檔案的概念,建議用這個。
ENTRYPOINT:
run container 時要執行的命令,可以和 CMD 混搭用,此時 CMD 會被視為初始參數來使用。
VOLUME:
掛載目錄用。
USER:
可以指令使用者為何。在此指令過後的 Dockerfile 指令,都會用這個使用者來執行。
WORKDIR:
工作目錄設定,在執行此指令後,在 Dockerfile 內後續的 RUN、CMD、ENTRYPOINT、COPY
ARG:
buid 時可以設定參數,讓 docker build 指令可以下參數來處理。
ONBUILD:
提供一個 trigger 機制,當別人要使用你 build 好的 image 當成 base 時,如果你當初在 build 時有寫 ONBUILD 指令,則別人在用這個 image 當成 base image 時,當跑完他 Dockerfile 的 FROM 指令之後會先跑你寫的 ONBUILD,接著才會開始跑它寫的其他指令。
STOPSIGNAL:
要不要在結束時收到系統發的信號。
HEALTHCHECK:
提供一個檢查的機制,你可以透過 HEALTHCHECK 來讓 docker 知道什麼樣的狀況對你的 container 來說才算是正常的。
SHELL:
改變預設的 shell。Dockerfile command 會有 shell 格式的命令,預設是用 /bin/sh -c 來執行命令,你可以透過 SHELL 強制修改掉。


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

exec 格式:RUN [“可执行文件”, “参数1”, “参数2”],这更像是函数调用中的格式。

FROM debian:stretch
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install

PS: 若發現一行寫不完時,可用「/」換行
FROM: 指定base image
WORKDIR: 指定docker執行起來時候的預設目錄位置
EXPOSE: 指定所有發布的port
CMD: 指定Instance啟動後所要執行的指令
ENTRYPOINT: 指令Instance啟動後,程式的進入點

當寫好 Dockerfile 在該目錄下執行下行指令
docker build -t mayer/foo:1.0.0 .
docker images 應可看到該images
docker run -d REPOSITORY:TAG
使用 Dockerfile 定制镜像
使用Dockerfile建置

分類:docker
由 Compete Themes 設計的 Author 佈景主題