以前咱們介紹了Docker的基本概念(前面的沒翻譯...),瞭解瞭如何使用Docker鏡像進行工做,而且學習了網
絡和容器之間的連接.這一節咱們將討論如何管理容器中及容器之間的數據.html咱們將查看下面兩種管理Docker中數據的主要方法.python
一個數據卷就是通過特殊設計的,在一個或多個容器中經過UFS文件系統提供的一些特性
實現數據持久化或共享.linux
你可使用帶有 -v 參數的 docker run 命令給容器添加一個數據卷.在一個 docker run
中能夠屢次使用 -v 參數來達到掛載多個數據卷的目的.咱們如今在web應用容器中掛載
單個卷.web
$ sudo docker run -d -P --name web -v /webapp training/webapp python app.py
docker這將會在容器中建立一個/webapp卷ubuntu
提示: 你也能夠在Dockerfile中使用VOLUME指令來給任何從那個鏡像建立的容器添加
一個或多個新數據卷bash
另外,使用 -v 參數也能夠掛載宿主的文件夾到容器裏app
webapp
$ 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你可使用上面的技術及你喜歡的工具進行自動數據備份,遷移和恢復.