linwebs

林林.台灣 | Linwebs - 課程

Docker容器虛擬化介紹 - Docker 資料管理

本文章為嘉大資工讀書會第二期課程內容
場次 5-2 【雲端系統佈署】 Docker 容器虛擬化介紹

每一個容器就好像一台電腦,擁有自己的磁碟,在一般的情況下,每一個容器執行的服務不一定相同,所以每一個容器磁碟裡的檔案內容也都不一樣,但其實這些容器的檔案終究還是存在本機裡面,我們可以透過一些設定讓不同容器存取相同的檔案目錄,如此一來,就能提高容器使用的方便性。

本頁目錄

 

檔案卷

檔案卷就是存放檔案的地方,一般情況下,在建立容器時就會自動建立檔案卷,在容器刪除時就會自動刪除檔案卷,基本上不需要由我們手動來操作,除非特定的情況下,我們可特別設定容器檔案卷的掛載方式。

docker 預設的檔案卷目錄在 /var/lib/docker/volumes 此資料夾下。

 

建立檔案卷 create

建立新的檔案卷並不一定要為他命名,若不命名,docker 會自動分配一個很像 ID 的名稱給它。

指令: volume create [檔案卷名稱]

  • 不指定檔案卷名稱
$ docker volume create
5302e1b6f8a76b4b3447fbd660004a0ce4297ddd84164c15e092cdfe388b38f3
  • 指定檔案卷名稱
$ docker volume create test
test

查看檔案卷 ls

指令: volume ls

$ docker volume ls
DRIVER    VOLUME NAME
local     5302e1b6f8a76b4b3447fbd660004a0ce4297ddd84164c15e092cdfe388b38f3
local     test

刪除檔案卷 rm

因為檔案卷沒有 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 檔案卷到容器內

掛載已存在的 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

參考資料: Docker 官方文件 - Use volumes

建立時間:2021/8/27 AM 1:47
修改時間:2021/9/1 PM 5:13
作者: Linwebs

bookmark標籤