紀錄 Dockerfile 寫法

Sample

# volume sample
# dockerfile無法指定主機volume的路徑,是由docker決定
# 若要找到volume主機路徑則需等container建立後,inspect 查看主機volume路徑
# 若進入volume目錄遇到權限問題,run images時 加上 --privileged=ture (root權限)

FROM centos
VOLUME ["/containerVolume1", "/containerVolume2"]
CMD echo "finish"
CMD /bin/bash

Dockerfile keyword 範例

FROM (該image是繼承自哪個image)
FROM centos

MAINTAINER(該image的作者)
MAINTAINER leo

RUN (執行指令)
RUN dotnet restore

EXPOSE (該image對外的port號)
EXPOSE 8080

WORKDIR (設定 attach 進 container後的預設目錄) # (若沒有指定WORKDIR,則預設是根目錄)
WORKDIR /tmp

ENV (設定環境變數)
ENV testPath /tmp/testPath
# 使用方式 = $testPath 
# e.g. echo $teshPath

ADD (將當前目錄config底下的資料 複製到/config/)
ADD config/ /config/

COPY (與ADD 功能類似,但ADD功能較多 (ADD 可自動解壓縮檔案 & 支援URL下載檔案))


VOLUME (設定volume) # (在dockerfile中,無法指定宿主機的路徑)
VOLUME ["/testVolume1", "/testVolume2"]
### CMD與ENTRYPOINT可以同時撰寫,若撰寫多個CMD與ENTRYPOINT,則只會執行最後一個CMD與最後一個ENTRYPOINT
### CMD與ENTRYPOINT在dockerfile裡順序無所謂,最後生成命令都是為: ENTRYPOINT指令 + CMD指令
### 若ENTRYPOINT 沒有設定,則預設為 /bin/bash


CMD (container啟動後要執行的script)
# (當有多個CMD的指令,只會執行最後一個CMD,而若docker run 最後有加指令,也會覆蓋dockerfile裡最後一個CMD)
# 比如說若dockerfile 最後一個CMD指令為 CMD cat /etc/hosts
# 而真正執行docker run -it xximage /bin/bash  (此時/bin/bash會取代 cat /etc/hosts指令)
CMD cat /etc/hosts


ENTRYPOINT (功能與CMD一樣,但CMD會被覆蓋,ENTRYPOINT則不會)
# (當有多個ENTRYPOINT 的指令,只會執行最後一個ENTRYPOINT,而若docker run 最後有加指令,會疊加指令
# 比如說若dockerfile 最後一個ENTRYPOINT 指令為 ENTRYPOINT ["curl", "-i", "https://www.google.com/"]
# 執行docker run -it xximage -v , -v會疊加進ENTRYPOINT指令裡
# 此時最後執行的命令為 curl -i -v https://www.google.com/
ENTRYPOINT ["curl", "-i", "https://www.google.com/"]

轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡

斗內💰

×

歡迎斗內

github