[docker] 管理docker容器中的數據


之前我們介紹了Docker的基本概念(前面的沒翻譯...),了解了如何使用Docker鏡像進行工作,並且學習了網
絡和容器之間的鏈接.這一節我們將討論如何管理容器中及容器之間的數據.

我們將查看下面兩種管理Docker中數據的主要方法.

  • 數據卷
  • 數據卷容器

數據卷

一個數據卷就是經過特殊設計的,在一個或多個容器中通過UFS文件系統提供的一些特性
實現數據持久化或共享.

  • 數據卷可以在容器之間共享和重復利用
  • 可以對數據卷里的內容直接進行修改
  • 對鏡像的更新不會改變數據卷的內容
  • 卷會一直持續到沒有容器使用他們

添加一個數據卷

你可以使用帶有 -v 參數的 docker run 命令給容器添加一個數據卷.在一個 docker run
中可以多次使用 -v 參數來達到掛載多個數據卷的目的.我們現在在web應用容器中掛載
單個卷.

$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py

這將會在容器中創建一個/webapp卷

提示: 你也可以在Dockerfile中使用VOLUME指令來給任何從那個鏡像創建的容器添加
一個或多個新數據卷

 

掛載宿主文件夾到數據卷

另外,使用 -v 參數也可以掛載宿主的文件夾到容器里


$ sudo docker -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

這樣會把本地文件夾/src/webapp掛在到容器中的/opt/webapp目錄.對於測試來說這是
非常有用的.例如我們可以把源碼掛載到容器中並通過修改源碼查看應用運行情況.在
宿主機上的文件夾必須是絕對路徑,而且當文件夾不存在時會自動創建.

提示:出於可移植性和共享的木的掛載宿主文件的功能在Dockerfile中無法使用.就宿
文件而言,宿主依賴可能事容器無法在所有的主機上正常工作.

默認情況下Docker以讀寫權限掛載數據卷,但是我們也可以以只讀方式進行掛載.

$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

這里我們掛載了和上面相同的一個目錄 /src/webapp.但是我們添加了 ro 選項來制定
掛載時文件權限應該是只讀的.

 

創建和掛在一個數據卷容器

如果你有一些持久數據需要在容器之間共享或想要使用非持久性容器,最好的方式是創
建一個命名數據卷容器,然后從數據卷容器中掛載數據.

我們來創建一個帶有卷的命名容器來共享數據.


$ sudo docker run -d -v /dbdata --name dbdata training/postgres

你可以在另外一個容器中使用 --volumes-from 標記來掛在/dbdata卷


$ sudo docker run -d --volumes-from dbdata --name db1 training/postgres

然后是另外一個容器同時也掛載/dbdata卷:


$ sudo docker run -d --volumes-from dbdata --name db2 training/postgres

你可以使用多個 --volumes-from 參數來把多個容器中的多個數據卷放到一起.

你也可以掛載通過掛載dbdata容器實現的容器db1和db2來擴展關系鏈


$ sudo docker run -d --name db3 --volumes-from db1 training/postgres

 

備份,恢復和遷移數據

另外一個有用的功能是使用它們來進行備份,恢復或遷移數據.如下所示,我們使用
--volumes-from 標記來創建一個掛載了要備份數據卷的容器.


$ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

這里我們創建並登錄了一個新容器,掛載了dbdata容器中的數據卷.並把一個本地目錄掛
載到了/backup下.最后我們傳入了一條tar命令來備份dbdata卷到/backup下.當命令執
行完成后容器就會停止運行,並保留一個dbdata的備.

然后你就可以恢復數據到同一個或者另外創建的容器中.創建一個新的容器:


$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后解壓備份文件到新容器的數據卷中:


$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

你可以使用上面的技術及你喜歡的工具進行自動數據備份,遷移和恢復.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM