Docker從入門到精通<6>
Dockerfile自動構建docker映象
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>] # 構建新映象所依賴的基礎映象
RUN<command> |["executable", "param1", "param2"]
執行命令,這裡有兩種方式,第一種預設直接呼叫系統shell,第二種會轉換為json,所以一定要用雙引號。如果命令比較長可以使用反斜槓進行換行處理。
與shell形式不同,exec形式不呼叫命令 shell。這意味著不會發生正常的 shell 處理。
例如,RUN [ "echo", "$HOME" ]
不會對 進行變數替換$HOME
。如果你想要 shell 處理,那麼要麼使用shell形式,要麼直接執行 shell,例如:RUN [ "sh", "-c", "echo $HOME" ]
.當使用 exec 形式並直接執行 shell 時,就像 shell 形式一樣,是 shell 進行環境變數擴充套件,而不是 docker。如果命令中需要轉義,需要用反斜槓進行轉義。
ADD
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
把檔案、目錄、或者遠端的檔案的url,從src 拷貝到 映象 的檔案系統中的dest位置。
注意:
1. --chown 僅適用於linux系統。
2. src原始檔等可以進行模糊匹配,指定go語言中的filepath.Match,支援 .*?
3. dest 的位置,是相對於WORKDIR的位置,比如WORKDIR 為/data/, dest為app/,那麼實際上的dest路徑為/data/app/
COPY
CMD 指定在容器中執行的命令。跟run不同,run是指在構建構建映象時執行的命令
LABEL
<key>=<value> <key>=<value> <key>=<value> ... 構建完映象後,我們可以通過
docker image inspect --format='' myimage 檢視標籤資訊
MAINTAINER 作者資訊,已經棄用,可以用label取代
EXPOSE
<port> [<port>/<protocol>...] 指定docker容器在執行時偵聽的埠,還可以指定協議是TCP,還是UDP,預設為TCP,例如:EXPOSE 80/TCP, 無論這個引數如何設定docker -p 都將覆蓋這個引數,-P表示可以設定隨機埠。
ENV 設定環境變數,後續的構建中可以進行引用和替換。
FROM busybox ENV FOO=/bar WORKDIR ${FOO} # WORKDIR /bar ADD . $FOO # ADD . /bar COPY \$FOO /quux # COPY $FOO /quux
STOPSIGNAL
USER
VOLUME
WORKDIR
ONBUILD
(when combined with one of the supported instructions above)