Dockerfile中常用配置項的功能都是什麼?

Esther_Cheung發表於2024-04-06

FROM:

指定基礎映象,新映象將基於這個基礎映象構建。

RUN:

在映象構建時執行命令,如安裝軟體包、設定環境變數等。

格式:RUN <command>RUN ["executable", "param1", "param2"]

CMD:

設定容器啟動時預設執行的命令。

格式:CMD ["executable","param1","param2"]CMD command param1 param2CMD ["param1","param2"](作為ENTRYPOINT的預設引數)。

ENTRYPOINT:

配置容器啟動時執行的命令,使得容器以應用程式的方式執行。

格式:ENTRYPOINT ["java", "-jar", "/app.jar"]

在這個例子中,當容器啟動時,它會執行java -jar /app.jar命令來執行指定的Java應用程式。

COPY:

本地檔案或目錄複製到Docker映象的指定路徑

格式:COPY <src>... <dest>

比如

COPY . . 這個命令實際上做了兩件事情:

  1. 第一個 . 指的是構建上下文中的當前目錄。構建上下文通常是你在執行 docker build 命令時所在的目錄,或者是透過 -f 引數指定的 Dockerfile 所在的目錄。這個目錄中的所有檔案和子目錄都會被考慮在內。
  2. 第二個 . 是目標路徑,也就是映象內的路徑。在這裡,它表示映象的當前工作目錄。因此,COPY . . 會將構建上下文中的所有檔案和目錄複製到映象的當前工作目錄中。

ADD:

與COPY類似,但還可以從URL獲取檔案並自動解壓縮。

格式:ADD <src>... <dest>

WORKDIR:

設定容器內的工作目錄,即容器內部,命令執行時的預設路徑。用於RUN、CMD、ENTRYPOINT、COPY和ADD指令。

格式:WORKDIR /path/to/workdir

VOLUME:

用於為容器指定一個或多個掛載點。這些掛載點可以用於將宿主機的目錄或檔案與容器內部進行共享,從而實現資料的持久化儲存

使用VOLUME指令的一個常見場景是資料庫容器。例如,你可以使用VOLUME指令將MySQL資料庫的儲存目錄掛載到容器外部,這樣即使MySQL容器被刪除或重建,資料庫的資料也會保留在宿主機上,不會被丟失。

例如,你可以在Dockerfile中新增如下指令來宣告一個資料卷:
Dockerfile:
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:

定義容器健康檢查指令,用於判斷容器是否正常執行。

相關文章