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 映象構建效率更高、減小其大小、使其更靈活且可重用。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP