[Day04]: 共享檔案方法-資料卷


甚麼是資料卷 (Data Volume)?

一個可供一個或多個容器使用的特殊容器

特點

  • 更新資料卷不會影響映像檔
  • 可在多個容器間共享
  • 直到容器結束使用,資料卷一直存在

建立資料卷

透過指令參數直接建立掛載資料卷的容器

* docker  create  --name  TDOH –v /html nginx
// name 為容器名稱
// -v 在容器內產生路徑為 /html的資料卷

也可以單獨產生資料卷

* docker volume create
//會回傳一個獨特的 64位元 16進位字串

* docker volume --name TIKB-043
// 會回傳 TIKB-043 這個名字

查看資料卷詳細資料

* docker inspect TIKB-043
//回傳資料卷資料

掛載資料卷

* docker create --name TDOH -v TIKB-043:/TIKB-043 nginx
// name一樣是容器名稱
// -v <資料卷名稱>:<容器內的掛載路徑>

也可掛載host內現存的路徑

* docker create --name TDOH -v /var/html:/html nginx
// -v <src>:<dest>

也可增加參數,掛載多個資料卷

* docker create --name TDOH -v /var/html:/html -v TIKB-043:/TIKB-043 nginx

可限制掛載文件權限

* docker create --name TDOH -v /var/html:/html:ro -v TIKB-043:/TIKB-043 nginx

刪除資料卷

資料卷並不會因為容器的停止而跟著消失,所以需要額外指令來刪除

刪除前需要查看有哪些資料卷

* docker volume list

* docker volume rm <資料卷名稱/資料卷 id>
// 刪除資料卷
* docker rm -v <容器名稱>
// 刪除此容器掛載的資料卷,若有資料卷被其他容器使用,則該資料卷不刪除

資料卷容器(Data Volume Container)

專門用來存放資料卷的容器
其他容器改由資料卷容器中掛載資料卷,而非直接從 host掛載

原理

藉由刪除 docker指令的 –v 參數,由於資料卷容器維持運行,所以資料卷容器內的資料跟著被刪除

建立資料卷容器

其實就是一般容器掛載資料卷

* docker create --name Data -v TIKB-043:/TIKB-043 nginx
//建立資料卷容器,name為資料卷容器名稱

* docker inspect Data
// 可查看資料卷容器詳細資訊


連結資料卷容器

*   docker  run   -d  --name TDOH  --volumes-from  Data   nginx
//參數 -d 為容器的後台守護模式
// name 為容器名稱
//  -- volumes-from 欲連結的資料卷容器名稱

亦可多個參數,連接至多個資料卷容器

*   docker  run   -d  --name TDOH  --volumes-from  Data   --volumes-from FLASH  ]nginx

對某個容器內的資料卷進行操作,其他容器內的資料卷也會同步更動
可實現檔案的共同操作

資料卷的移植

備份資料卷,無法透過Docker內建的方式進行,但可以透過 Tar 壓縮還原工具 對資料卷進行備份

匯出資料卷

  1. 建立新容器
  2. 連接到資料卷容器
  3. 運行新容器
  4. 進入容器執行封裝命令
  5. 匯出資料位在Host 中對應的掛載目錄
*  docker run –it –volumes-from Data –v $(pwd):/backup --name  exporter –rm ubuntu /bin/bash
// 參數 -it 為容器的前台互動模式
// -v $(pwd):/backup 從host現在目錄下掛載所有檔案到容器內 /backup目錄底下
// name 容器名稱
//rm 容器結束時則刪除

在容器內

*   tar cf /backup/data.tar /data
*   exit
// 在容器內的 /backup 底下建立 還有 /data 目錄的 data.tar壓縮檔

此時 Exporter容器已消失

匯入資料卷

* docker run –it –volumes-from Data –v $(pwd):/backup --name  importer –rm ubuntu /bin/bash

在容器內

* tar xf /backup/data.tar
* exit
// 將從 host中掛載的 data.tar 壓縮檔解壓縮

 資料卷對於 Docker可說是檔案編輯修改共享的利器
 但遠端的檔案該如何傳送呢?
 下一篇則會提到 Docker中的網路問題


參考資料

[1]https://larrylu.blog/step-by-step-dockerize-your-app-ecd8940696f4

#docker #虛擬化技術 #資料卷 #軟體工程







你可能感興趣的文章

筆記:覺得 JavaScript function 很有趣的我是不是很奇怪

筆記:覺得 JavaScript function 很有趣的我是不是很奇怪

串接 API

串接 API

筆記:所有的函式都是閉包:談 JS 中的作用域與 Closure

筆記:所有的函式都是閉包:談 JS 中的作用域與 Closure






留言討論