簡介
Docker 資料卷 是將應用程式容器化時的一個重要概念。了解這個概念對於確保容器化應用程式的最佳體驗,以及可靠的持久化和資料管理至關重要。然而,雖然這個概念很重要,但對許多開發人員來說也令人困惑且複雜。對於開發人員和 DevOps 專家來說,能夠理解如何設定 Docker 資料卷、了解其正確用法、知道不同類型的資料卷以及為其應用程式選擇哪種類型是非常重要的。
本教學專注於 解釋 Docker 資料卷的概念和用法。完成本教學後,您將掌握如何設定和使用任何類型的 Docker 資料卷。
先決條件
若要進行本教學,您需要具備以下項目:
- Ubuntu 已安裝。請查看我們的 如何設定您的 Ubuntu 18.04 伺服器 教學以供快速參考。
- 具有 sudo 權限的 Ubuntu 使用者。這個步驟可能會很複雜,特別是如果您不熟悉 Linux。請閱讀 設定 Linux Sudoers 檔案 以獲取詳細指南。
- Docker 已安裝於 Ubuntu。要在您的 Ubuntu 上安裝 Docker,您可以參考我們的 如何在公有雲的 Ubuntu 上安裝 & 操作 Docker 部落格。
雖然本教學專注於在 Ubuntu 上管理 Docker, docker 指令適用於所有已安裝 Docker 的作業系統。
理解 Docker 容器如何運作
要完全理解 Docker 資料卷,您必須了解 Docker 容器是如何運作的。在本節中,我們將為 Docker 的新使用者介紹基本概念。如果您已經了解 Docker 的運作方式,或者是經驗豐富的 Docker 使用者,可以跳過本節並開始使用資料卷。
Docker 容器允許透過安裝 Docker 平台,在主機作業系統之上執行應用程式。因為 Docker 平台安裝在主機作業系統上,所以在主機與客端應用程式之間形成了一個抽象層。與虛擬機器不同,Docker 容器與主機作業系統共享其 Linux 核心。由於 Docker 不需要在此主機之上安裝任何額外的作業系統,因此只要該主機上安裝了 Docker,Docker 應用程式就是輕量級的,且可在所有主機上存取。
由於沒有額外的客端作業系統,Docker 平台會與主機共享資源。啟動 Docker 應用程式非常快速,但當您必須共享資源時,複雜性就隨之而來。Docker 沒有自己的記憶體或儲存空間來進行資料持久化。這些資源必須來自主機。習慣使用虛擬機器的人會發現這種資源共享和管理的過程很困難。缺乏適當的知識可能會導致非預期且不希望看到的結果。雖然本教學假設您熟悉 Docker 生態系統,但歡迎隨時閱讀我們的詳細教學 什麼是 Docker?Docker 生態系統概述 以進行快速複習。
使用 Docker 資料卷持久化資料
使用 Docker 時,您無法直接在其中建立資料卷。因此,為了儲存資料,我們需要建立一個附加了資料卷的 Docker 資料卷容器。為了將我們的 Docker 應用程式與此資料卷容器連接,我們使用 Docker’s --volume-from 指令來取得容器並將其附加到我們的應用程式。
我們將逐步介紹這個過程:
- 首先,建立一個名為
my-container 的全新容器,方法是執行以下指令:
1docker create -v /tmp --name my-container ubuntu
這將在 /tmp 資料夾中建立一個新容器。您可以根據需要變更資料夾目錄。 - 現在您的資料容器已準備就緒,您可以透過執行一個帶有
--volume-from 旗標的新 Ubuntu 容器來寫入資料,然後執行
bash。我們寫入到
tmp 目錄將會儲存在我們主機的
/tmp 資料夾:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
該 -t 命令列選項會從容器內部呼叫終端機。而 -i 旗標使連線具備互動性。在 Ubuntu 容器的 bash 提示字元下,於 中建立一個檔案/tmp:
1echo "Some sample data" > /tmp/sample_file - 最後,藉由執行
exit 命令來退出此 bash。接下來,執行以下命令:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
您將會在此目錄中找到您的 sample_file 。指定資料卷的數量沒有限制。您可以使用 旗標來新增任意數量的資料卷。--volumes-from 旗標。您也可以根據需要建立任意數量的資料卷容器。
在主機與 Docker 容器之間存取資料
對於有虛擬化經驗的讀者來說,此選項類似於虛擬機器中的共享資料夾選項。在這裡,我們不建立 data-only 容器,而是使用 Docker 映像檔來執行我們的 Docker 應用程式,並用主機系統上某個目錄的內容來覆寫其目錄之一。
常見的情境是將記錄檔儲存在主機中。這可能是必要的,以便我們可以在需要時分析這些檔案,而無需進入機器內部。對於這種情境,假設您正在使用 Docker Nginx image ,並且您希望將其記錄檔儲存在主機中。Nginx Docker 映像檔會將記錄寫入 /var/log/nginx 目錄,但這是 Docker Nginx 容器內部的 /var/log/nginx 。因此,主機無法存取此位置。
為了達到我們的目標,我們需要建立一個共享資料夾,以便在主機與 Docker Nginx 映像檔之間儲存記錄。下面我們將透過簡單的逐步指南來說明此過程:
- 首先,在您的主機中建立一個您想要儲存記錄的目錄:
然後,藉由執行以下命令來啟動您的容器:1mkdir ~/my-nginxlogs
1docker run -d -v ~/my-nginxlogs:/var/log/nginx -p 5000:80 -i nginx
- 此
run 命令接受了幾個參數,所以讓我們將其拆解以更清楚地理解:
- -p 5000:80:設定連接埠轉發。Nginx 容器預設在連接埠 80 進行監聽,而這會將 Nginx 容器的連接埠 80 對應到主機系統上的連接埠 5000 。
- -d:分離程序並在背景執行。
- -v ~/my-nginxlogs:/var/log/nginx:我們將 Nginx 容器內部的 /var/log/nginx 目錄連結到主機上的 /my-nginxlogs 目錄。此 : 會將主機的路徑與容器的路徑分開。主機路徑一律排在最前面。
現在我們的 Nginx 容器正在執行,首先藉由開啟您的網頁瀏覽器並執行以下網址,來檢查 Nginx 伺服器是否在我們主機的 5000 連接埠上提供服務:http://localhost:5000。一旦出現歡迎頁面,您的 Nginx 伺服器就準備就緒,並在其 /var/log/nginx 資料夾中建立記錄。
如果您開啟主機的 /my-nginxlogs 資料夾,您將會在此處看到來自 Docker Nginx 容器的記錄檔。如果您在 Nginx 容器執行時,對主機上的 /my-nginxlogs 資料夾進行變更,變更也將會反映在容器的 /var/log/nginx 資料夾中。
結論
在本教學中,我們採用了全面的方法來理解 Docker 資料卷。我們探討了為您的應用程式建立資料卷、在主機與 Docker 容器之間共享資料、資料類型以及持續性資料。這將有助於您在容器化應用程式中實現資料持續性,並管理應用程式的狀態和設定。
若要進一步學習 Docker,請查看來自 我們部落格:
- 的如何在 Ubuntu 20.04 上使用 GitLab 自管執行個體託管 Docker 映像檔存放庫並建置 Docker 映像檔
- 在 Ubuntu 20.04 上使用 Docker 建置與部署 Flask 應用程式
- 在 Ubuntu 18.04 上設定私有 Docker Registry
- 如何在 Docker 容器與主機之間共享資料
- 清理 Docker 資源 – 映像檔、容器與資料卷
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。