FROM:
指定基礎映象,新映象將基於這個基礎映象構建。
RUN:
在映象構建時執行命令,如安裝軟體包、設定環境變數等。
格式:RUN <command>
或 RUN ["executable", "param1", "param2"]
。
CMD:
設定容器啟動時預設執行的命令。
格式:CMD ["executable","param1","param2"]
或 CMD command param1 param2
或 CMD ["param1","param2"]
(作為ENTRYPOINT的預設引數)。
ENTRYPOINT:
配置容器啟動時執行的命令,使得容器以應用程式的方式執行。
格式:ENTRYPOINT ["java", "-jar", "/app.jar"]
在這個例子中,當容器啟動時,它會執行java -jar /app.jar命令來執行指定的Java應用程式。
COPY:
將本地檔案或目錄複製到Docker映象的指定路徑中
格式:COPY <src>... <dest>
。
比如
COPY . .
這個命令實際上做了兩件事情:
- 第一個
.
指的是構建上下文中的當前目錄。構建上下文通常是你在執行docker build
命令時所在的目錄,或者是透過-f
引數指定的 Dockerfile 所在的目錄。這個目錄中的所有檔案和子目錄都會被考慮在內。 - 第二個
.
是目標路徑,也就是映象內的路徑。在這裡,它表示映象的當前工作目錄。因此,COPY . .
會將構建上下文中的所有檔案和目錄複製到映象的當前工作目錄中。
ADD:
與COPY類似,但還可以從URL獲取檔案並自動解壓縮。
格式:ADD <src>... <dest>
。
WORKDIR:
設定容器內的工作目錄,即容器內部,命令執行時的預設路徑。用於RUN、CMD、ENTRYPOINT、COPY和ADD指令。
格式:WORKDIR /path/to/workdir
。
VOLUME:
用於為容器指定一個或多個掛載點。這些掛載點可以用於將宿主機的目錄或檔案與容器內部進行共享,從而實現資料的持久化儲存。
使用VOLUME指令的一個常見場景是資料庫容器。例如,你可以使用VOLUME指令將MySQL資料庫的儲存目錄掛載到容器外部,這樣即使MySQL容器被刪除或重建,資料庫的資料也會保留在宿主機上,不會被丟失。
VOLUME /var/lib/mysql
在執行容器時,使用-v選項將資料卷對映到宿主機的目錄來實現資料的持久化儲存:-v <宿主機目錄或檔案>:<容器目錄或檔案>
bash:
docker build -t myimage . docker run -v /host/path:/var/lib/mysql myimage
在這個例子中,/host/path
是宿主機上的目錄,/var/lib/mysql
是容器內的目錄。透過 -v
引數,你將宿主機的 /host/path
目錄掛載到了容器的 /var/lib/mysql
目錄上。這樣,容器對 /var/lib/mysql
目錄的讀寫操作實際上是在操作宿主機上的 /host/path
目錄,從而實現了資料的持久化。
EXPOSE:
宣告容器要監聽的埠,方便外部訪問容器服務。
格式:EXPOSE <port> [<port>...]
。
ENV:
設定環境變數。可以在構建映象和啟動容器時呼叫。
格式:ENV <key>=<value> [<key>=<value>...]
。
LABEL:
為映象新增後設資料標籤,比如版本號。
格式:LABEL <key>=<value> [<key>=<value>...]
。
USER:
設定執行容器時使用的使用者名稱或UID和組名或GID。
格式:USER <user>[:<group>]
或 USER <uid>[:<gid>]
。
ARG:
定義構建時的環境變數,僅在構建過程中有效。(可以後續覆蓋)
格式:ARG <name>[=<default value>]
。
ONBUILD:
定義在當前映象基礎上構建新映象時需要執行的操作。
格式:ONBUILD [INSTRUCTION]
。
STOPSIGNAL:
設定容器停止時傳送的訊號。
HEALTHCHECK:
定義容器健康檢查指令,用於判斷容器是否正常執行。