Dockerfile 中的重要指令


我們都知道 Dockerfile 在建立高效且靈活的 Docker 映象中的重要性。Dockerfile 包含一組指令,當您使用 docker build 命令構建 Docker 映象時,這些指令會按步驟執行。它包含某些決定映象結構的指令和命令、構建映象所需的時間、與 Docker 構建上下文相關的指令、與容器中要安裝的軟體包和庫相關的資訊等等。因此,建立高效、可重用、簡潔的 Dockerfile 非常重要,因為它包含您將構建的映象的藍圖。

在本文中,我建立了一個精心策劃的列表,其中包含 Dockerfile 中廣泛使用的所有重要命令和指令。在另一篇文章中,我還列出了建立 Dockerfile 的最佳實踐。

https://tutorialspoint.tw/best-practices-for-writing-a-dockerfile 

事不宜遲,讓我們討論一些您應該徹底瞭解的最重要的 Dockerfile 命令,以便高效地建立 Dockerfile。

FROM

您可能已經注意到,幾乎所有 Dockerfile 都以 FROM 命令開頭。FROM 命令的形式為:

FROM <image name>:<tag name>

FROM 命令允許您建立一個基礎映象,例如作業系統、程式語言等。在此命令之後執行的所有指令都發生在此基礎映象上。它包含一個映象名稱和一個可選的標籤名稱。如果您之前已將基礎映象拉取到本地機器,則它不會再拉取新的。Docker 倉庫中提供了多個預釋出的 Docker 基礎映象。您也可以將您自己的自定義基礎映象推送到 Docker 倉庫中。

以下是使用不同基礎映象的 FROM 指令示例:

FROM ubuntu
FROM centos
FROM python:3

RUN

RUN 指令用於執行指定的命令。您可以使用多個 RUN 指令來執行不同的命令。但將所有 RUN 指令組合成一個指令是一種有效的方法。

每個 RUN 命令都會建立一個新的快取層或中間映象層,因此將它們全部連結到一行會提高效率。但是,連結多個 RUN 指令也可能導致快取失效。

以下是 RUN 命令的一些示例:

RUN apt−get −y install vim
RUN apt−get −y update

您可以透過以下方式連結多個 RUN 指令:

RUN apt−get −y update \
&& apt−get −y install firefox \
&& apt−get −y install vim

CMD

如果您想透過指定一個預設命令來執行 Docker 容器,該命令預設情況下會為該映象的所有容器執行,則可以使用 CMD 命令。如果您在 docker run 命令期間指定了命令,則它會覆蓋預設命令。指定多個 CMD 指令,只會執行最後一個。

CMD 命令示例:

CMD echo "Welcome to TutorialsPoint"

如果您在 Dockerfile 中指定上述行,並使用以下命令執行容器而無需指定任何引數,則輸出將為“歡迎來到 TutorialsPoint”。

sudo docker run −it <image_name>

輸出:“歡迎來到 TutorialsPoint”

如果您嘗試指定任何其他引數(例如 /bin/bash 等),則預設 CMD 命令將被覆蓋。

ENTRYPOINT

ENTRYPOINT 和 CMD 之間的區別在於,如果您嘗試在 docker run 命令中指定預設引數,它不會忽略 ENTRYPOINT 引數。ENTRYPOINT 命令的 exec 形式為:

ENTRYPOINT [“<可執行命令>”, “<引數 1>”, “<引數 2>”, …]

如果您使用了 ENTRYPOINT 指令的 exec 形式,則還可以藉助 CMD 命令設定其他引數。例如:

ENTRYPOINT ["/bin/echo", "Welcome to TutorialsPoint"]
CMD ["Hello World!"]

在不帶任何引數的情況下執行 docker run 命令將輸出:

歡迎來到 TutorialsPoint Hello World!

如果您指定任何其他 CLI 引數,“Hello World!” 將被覆蓋。

WORKDIR

您可以使用 WORKDIR 指令在容器內指定您的工作目錄。Dockerfile 中之後的任何其他指令都將僅在此特定工作目錄上執行。

例如,

WORKDIR /usr/src/app

將容器內的工作目錄設定為 /usr/src/app。

COPY

此指令允許您將目錄從本地機器複製到 Docker 容器。

例如,

FROM ubuntu
WORKDIR /usr/src/app
COPY ∽/Desktop/myapp .

這會將本地機器中 ∽/Desktop/myapp 目錄內的所有檔案複製到 Docker 容器內的當前工作目錄。

ADD

與 COPY 指令類似,您可以使用 ADD 將檔案和資料夾從本地機器複製到 Docker 容器。但是,ADD 還允許您從 URL 以及 tar 檔案複製檔案。

例如,

ADD ∽/Desktop/myapp/practice.tar.gz /usr/src/app

會將 tar 檔案內的所有內容複製到容器內的 /usr/src/app。

ADD <URL such as a github url> <Destination path inside the container>

此命令會將 github url 內的所有檔案複製到目標位置。

EXPOSE

Dockerfile 中的 EXPOSE 指令通知容器正在網路上的指定埠偵聽。預設協議為 TCP。

示例

EXPOSE 8080

會將 8080 埠對映到容器。

您可以將 -p 標誌與 docker run 命令一起使用,以使容器偵聽另一個容器或主機機器。

LABEL

您可以使用 LABEL 指令為 Docker 映象新增描述或元資料。它是一個鍵值對。

示例:

LABEL description="This is a sample image"

總之,這些是在 Dockerfile 中最常用的一些基本且重要的指令,並且以正確的方式使用它們肯定會使您的 Docker 映象構建效率更高、減小其大小、使其更靈活且可重用。

更新於:2020 年 10 月 27 日

2K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.