3.1 掛載卷的基礎
將卷(volumes)掛載到容器中是 Docker 的一個關鍵功能,可以讓數據存儲在容器生命周期之外,保證數據的長期保存和可訪問性。卷可以用於多種目的,包括存儲配置文件、數據庫、日誌和其他重要的數據。在這節課裡,我們會討論如何將卷掛載到容器中,並提供一些實際的例子。
掛載卷的基礎
正如我們之前提到的,卷的存在獨立於容器的生命周期。它們存儲在主機機器上的專用目錄中,並可被任何容器連接使用。
用於掛載卷的指令
卷透過在啟動容器時使用參數 -v
或 --mount
來掛載到容器中。
3.2 參數 -v
使用參數 -v
的範例
1. 將 Volume 掛載到容器
創建 Volume 並將其掛載到容器:
創建 Volume:
docker volume create my_volume
啟動帶有 Volume 掛載的容器:
docker run -d --name my_container -v my_volume:/app nginx
在這個例子中,Volume my_volume
掛載到容器my_container
的目錄/app
中。
2. 掛載多個 Volume
你可以將多個 Volume 掛載到同一個容器:
docker run -d --name my_container -v volume1:/app/data -v volume2:/app/logs nginx
在這個例子中,Volume volume1
掛載到目錄 /app/data
, 而 Volume volume2
則掛載到目錄 /app/logs
。
3.3 參數 --mount
參數 --mount
提供了一種更加詳細的方式來掛載卷,並允許指定各種參數。
1. 使用 --mount
掛載卷
docker run -d --name my_container --mount source=my_volume,target=/app nginx
這個例子和之前用 -v
的例子類似,但使用了更詳細的語法。
2. 掛載帶有額外參數
docker run -d --name my_container --mount source=my_volume,target=/app,readonly nginx
在這個例子中,卷被以只讀模式(readonly
)掛載。
3.4 實際範例
範例 1: 為資料庫使用 Volumes
創建並使用一個 Volume 來儲存資料庫數據。
創建 Volume:
docker volume create db_data
使用掛載 Volume 啟動資料庫容器:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
在此範例中,PostgreSQL 資料庫的數據保存於 Volume db_data
中。
範例 2: 為配置文件使用 Volumes
創建用於存儲配置文件的 Volume,並將其掛載到容器中。
創建 Volume:
docker volume create config_data
將配置文件複製到 Volume:
docker run --rm -v config_data:/app busybox sh -c "echo 'configuration data' > /app/config.txt"
啟動使用配置文件 Volume 的容器:
docker run -d --name my_app -v config_data:/app/config nginx
在此範例中,配置文件被保存於 Volume config_data
中,並掛載至容器的目錄 /app/config
。
範例 3: 容器日誌
創建用於存儲容器日誌的 Volume,並將其掛載到容器中。
創建 Volume:
docker volume create logs_data
啟動掛載有用於日誌 Volume 的容器:
docker run -d --name my_app -v logs_data:/var/log/nginx nginx
在此範例中,Nginx 的日誌保存於 Volume logs_data
中。
3.5 檢查卷的内容
你可以通過將卷掛載到臨時容器來檢查其内容。
範例
啟動臨時容器並掛載卷:
docker run --rm -v my_volume:/app busybox ls /app
此範例會顯示卷 my_volume
的内容。
刪除卷
刪除不再使用的卷。
範例
刪除卷:
docker volume rm my_volume
如果卷正被容器使用,Docker 會顯示錯誤信息。請確保使用該卷的容器已被停止並刪除。
GO TO FULL VERSION