使用 .Dockerignore 檔案
我們知道,我們可以在提供低成本高計算能力的雲服務上執行我們的 Docker 映象。所以,人們可能會好奇為什麼我們需要最佳化 Docker 映象。想象一下這種情況:你在 Docker 容器中複製了一個大型檔案,而實際上你並不需要它。很明顯,這會增加 Docker 映象的大小,增加映象的整體構建時間,並導致許多快取問題。那麼,為什麼不使用一種簡單的技術來避免所有這些問題並提高 Docker 構建過程的整體效能呢?
什麼是 .dockerignore 檔案?
類似於 .gitignore 檔案,**.Dockerignore** 檔案允許你列出構建映象時可能要忽略的檔案和/或目錄。這肯定會減小映象的大小,並有助於加快 Docker 構建過程。為了理解整個過程,我們首先需要了解什麼是**Docker 構建上下文**。
什麼是 Docker 構建上下文?
我們知道 Docker 本質上是一個客戶端-伺服器應用程式。它有一個 Docker 客戶端,我們透過命令列工具在本地機器上執行它,還有一個 Docker 伺服器,也稱為 Docker 守護程序。透過命令列執行的 Docker 客戶端需要與 Docker 伺服器(守護程序)通訊,這就是指令執行的方式。其中一項任務是構建 Docker 映象。此外,需要注意的是,Docker 伺服器可以在遠端機器、本地機器甚至雲端執行。
當我們嘗試構建 Docker 映象時,我們需要將檔案傳送到 Docker 伺服器。這些檔案基本上就是構建上下文。這些檔案由 Docker 客戶端存檔到一個 .tar 檔案中,然後上傳到 Docker 伺服器。
它有什麼幫助?
在將檔案傳送到 Docker 伺服器之前,Docker 客戶端(命令列介面)開始在構建上下文的根目錄中搜索名為 .dockerignore 的檔案。如果找到此檔案,CLI(客戶端)將修改構建上下文以排除 .dockerignore 檔案中提到的那些檔案和目錄。
使用 .dockerignore 檔案的好處
減小映象大小
很明顯,如果構建上下文較小,Docker 映象的大小也會較小,因此將較小的映象上傳到任何雲服務或傳送到另一個遠端伺服器的成本將低於大型映象。
快取失效
重要的是要理解,最常見的做法是使用以下命令複製整個目錄或構建上下文來建立映象。
WORKDIR /usr/src/app COPY . .
現在,如果我們決定更改構建上下文,每次這樣做都會建立一個新的映象層,如果 Docker 映象很大,或者換句話說,如果它包含大型不必要的檔案,這將非常昂貴。任何更改都將導致快取失效,並破壞後續命令的快取。因此,始終最好從構建上下文中刪除大型不必要的檔案。
安全問題
你的構建上下文中可能有一些重要的原始檔或包含金鑰或密碼的檔案。你可能不希望將這些重要檔案暴露在最終的 Docker 映象中。例如,在 Docker 映象中暴露你的 .git 資料夾。因此,始終建議透過在 .dockerignore 檔案中提及這些檔案和資料夾來忽略它們。
如何建立 .dockerignore 檔案?
以下是一些如何在 .dockerignore 檔案中提及檔案、資料夾和目錄的示例。
#Ignore the logs directory logs/ #Ignoring the password file passwords.txt #Ignoring git and cache folders .git .cache #Ignoring all the markdown and class files *.md **/*.class
忽略 Dockerfile?
這裡可能出現另一個問題,在構建 Docker 映象時,我們能否以及是否應該忽略 Dockerfile?
這個問題的答案主要取決於開發者的偏好。如果你希望讓你的使用者瞭解建立 Docker 映象的規則,則不應在 .dockerignore 檔案中提及它。如果你想將其保密,你可以新增它。
總之,始終建議你在構建上下文中建立一個 .dockerignore 檔案,以使你的 Docker 映象更小、更安全,並使構建過程更快。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP