每一個容器就好像一台電腦,擁有自己的磁碟,在一般的情況下,每一個容器執行的服務不一定相同,所以每一個容器磁碟裡的檔案內容也都不一樣,但其實這些容器的檔案終究還是存在本機裡面,我們可以透過一些設定讓不同容器存取相同的檔案目錄,如此一來,就能提高容器使用的方便性。
本頁目錄
檔案卷就是存放檔案的地方,一般情況下,在建立容器時就會自動建立檔案卷,在容器刪除時就會自動刪除檔案卷,基本上不需要由我們手動來操作,除非特定的情況下,我們可特別設定容器檔案卷的掛載方式。
docker 預設的檔案卷目錄在 /var/lib/docker/volumes
此資料夾下。
建立新的檔案卷並不一定要為他命名,若不命名,docker 會自動分配一個很像 ID 的名稱給它。
指令: volume create [檔案卷名稱]
$ docker volume create
5302e1b6f8a76b4b3447fbd660004a0ce4297ddd84164c15e092cdfe388b38f3
$ docker volume create test
test
指令: volume ls
$ docker volume ls
DRIVER VOLUME NAME
local 5302e1b6f8a76b4b3447fbd660004a0ce4297ddd84164c15e092cdfe388b38f3
local test
因為檔案卷沒有 ID,所以刪除時,需要告訴 docker 檔案卷完整的名稱,不像其他指令一樣可以只給 ID 的前幾個字。
指令: volume rm <檔案卷名稱>
$ docker volume rm test
test
若要刪除檔案卷前須先確認沒有任何容器使用此檔案卷,否則會顯示以下錯誤:
$ docker volume rm test
Error response from daemon: remove <檔案卷名稱>: volume is in use - [<有使用此檔案卷的容器ID>]
掛載已存在的 docker 檔案卷,即使容器刪除了,此檔案卷仍然會保留著。
指令: run [-v <檔案卷名稱>:<掛載目錄>] <映像檔>
掛載 common
檔案卷為容器內的 /var/www/html
資料夾,在容器建立時指定參數。
-d 讓容器在背景執行
--name 指定新容器的名稱
-p 連接埠轉送 <外部>:<內部>
-v 掛載檔案卷 <外部>:<內部>
$ docker run -d --name test -p 80:80 -v common:/var/www/html php:8.0-apache
2e6f9e10a31c5cadc6f251e9c9d2f6a9a28490f07ff87de245f821935f2855a2
每次建立新的容器時,容器皆為乾淨的狀態,若容器內的程式須使用本機的檔案,可透過複製或掛載的方式進行存取。
常見的情況是要讓容器可以存取在本機已寫好的程式,如:網頁伺服器。
將程式放在本機,容器掛載本機的資料夾,如此一來就不用每次變更檔案時,都需要複製一份到容器內。
指令: run [-v <本機絕對路徑>:<掛載目錄>] <映像檔>
掛載本機的 /home/linwebs/test
資料夾為容器內的 /var/www/html
資料夾,在容器建立時指定參數。
-d 讓容器在背景執行
--name 指定新容器的名稱
-p 連接埠轉送 <外部>:<內部>
-v 掛載檔案卷 <外部>:<內部>
$ docker run -d --name test2 -p 80:80 -v /home/linwebs/test:/var/www/html php:8.0-apache
4f88c5bf2ad87f87e76e514d1a920b09723974adadeb049152d18ab970ecf41c