- CKA/CKAD應試教程:從Docker到Kubernetes完全攻略
- 段超飛編著
- 1002字
- 2025-03-17 18:51:30
1.8 數據卷的使用
當容器創建出來之后,會映射到物理機的某個目錄(這個目錄叫作容器層)里,在容器里寫的東西實際上都存儲在容器層,所以只要容器不被刪除,在容器里寫的數據就會一直存在。但是,一旦刪除容器,對應的容器層也會被刪除。
如果希望數據能永久保存,則需要配置數據卷,把容器里的指定目錄掛載到物理機的某個目錄里,如圖1-19所示。

圖1-19 數據卷
這里把物理機的目錄/xx掛載到容器的/data目錄里,當往容器的目錄/data里寫數據時,實際上是往物理機的目錄/xx里寫的。這樣即使刪除了容器,物理機目錄/xx里的數據仍然是存在的,就實現了數據的永久保留(除非手動刪除)。
在創建容器時,用-v指定數據卷,用法如下。
(1)-v /dir1:物理機的目錄/var/lib/docker/volumes/ID/_data/會掛載到容器的/dir1目錄里,這里的ID是隨機生成的。
(2)-v /dir2:/dir1:在物理機里指定目錄/dir2映射到容器的/dir1目錄里。
記住,冒號左邊的/dir2是物理機的目錄,冒號右邊的/dir1是容器里的目錄,這兩個目錄如果不存在,在創建容器時會自動創建。
第1步 創建容器c1,把物理機的一個隨機目錄掛載到容器的/data目錄里。

在此命令里,-v后面只指定了一個目錄/data,指的是在容器里創建/data,掛載物理機的一個隨機目錄。
上述命令在vms101上用nerdctl執行,只要把關鍵字docker換成nerdctl即可。
第2步 查看容器里的/data目錄對應物理機的哪個目錄。


上面有兩個參數,其中Destination指的是容器里的目錄,Source指的是物理機對應的目錄。
往容器里拷貝一個文件。

可以看到,目錄是空的。

第3步 刪除此容器。

上述命令在vms101上用nerdctl執行,只要把關鍵字docker換成nerdctl即可。
如果想在物理機里也指定目錄而不是隨機目錄,則用法為-v /xx:/data,此處冒號左邊是物理機的目錄,冒號右邊是容器里的目錄。
第4步 創建容器c1,把物理機的目錄/xx映射到容器的/data目錄里。

在nerdctl里物理機所需要的目錄不能自動創建,所以需要在vms101上先創建目錄/xx,然后在vms101上可以通過如下命令來實現。

查看此容器的屬性。

第5步 拷貝一些測試文件過去觀察一下。

第6步 刪除此容器。

上述命令在vms101上用nerdctl執行,只要把關鍵字docker換成nerdctl即可。
剛才在創建容器指定卷時,是這樣寫的-v /xx:/data,其實這里隱藏了一個默認選項rw,即完整的寫法是-v /xx:/data:rw,也就是容器里的/data是以rw的方式掛載物理機的/xx目錄,可以使用ro(只讀)的方式掛載卷。
第7步 在創建容器時設置卷為只讀。

上述命令在vms101上用nerdctl執行,只要把關鍵字docker換成nerdctl即可。
此時往容器里拷貝一個數據。

拷貝不過去,因為現在是以ro的方式掛載物理機的/xx目錄。
第8步 刪除此容器。

上述命令在vms101上用nerdctl執行,只要把關鍵字docker換成nerdctl即可。
- C#程序設計實訓指導書
- CentOS 7 Linux Server Cookbook(Second Edition)
- PHP網絡編程學習筆記
- C語言程序設計立體化案例教程
- Getting Started with NativeScript
- Working with Odoo
- 精通Python自動化編程
- Rust游戲開發實戰
- MINECRAFT編程:使用Python語言玩轉我的世界
- Qlik Sense? Cookbook
- ASP.NET Web API Security Essentials
- 面向物聯網的Android應用開發與實踐
- JavaScript高級程序設計(第3版)
- Data Analysis with R
- MySQL高可用實踐