天天看點

docker技術學習總結(4)—— 資料管理

容器中管理資料有兩種方式:

  • 資料卷(Data Volumes)
  • 資料卷容器(Data Volume Dontainers)

1,資料卷

資料卷是一個可供容器使用的特殊目錄,他繞過檔案系統,提供很多有用的特性:

  • 可以在容器之間共享和重用
  • 對資料卷的修改會立刻生效
  • 對資料卷的更新不影響鏡像
  • 一直存在直到沒有容器使用

資料卷的使用類型linux下對目錄或檔案進行mount操作。

  • 在容器中建立一個資料卷

在使用docker run指令的時候,使用-v标記可以在容器内建立一個資料卷,多次使用-v可以建立多個資料卷。

栗子:使用training/webapp 鏡像建立一個web容器,并建立一個資料卷挂載到容器的/webapp目錄:

docker run -d -P --name web -v /webapp training/webapp python app.py,其中-P是允許外部通路容器需要暴漏的端口。

  • 挂在一個主機目錄作為資料卷

使用-v标記也可以指定挂載一個本地目錄到容器中作為資料卷:

docker run -P -d --name web2 -v /src/webapp:/opt/webapp training/webapp python app.py,加載主機的/src/webapp目錄到容器的/opt/webapp目錄:

這個功能在進行測試的時候非常友善,可以在本地目錄放一些檔案或程式,然後在容器中使用。

  • 挂載一個主機檔案作為資料卷

-v也可以指定一個本地檔案挂載到容器中作為資料卷:

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash,這樣就可以記錄在容器内輸入過的曆史指令了。

2,資料卷容器

如果需要多個容器共享一些經常更新的資料,最簡單的方式就是使用資料卷容器。資料卷容器就是一個普通的容器,專門提供資料卷給其他容器挂載:

首先,建立一個資料容器dbdata,并在其中建立一個資料卷挂載點dbdata:

docker run -it -v /dbdata --name dbdata ubuntu 

然後可以在其他容器使用--volumes-from來挂載dbdata容器中資料卷,例如建立db1、db2兩個容器,并從dbdata容器挂載資料卷:

docker run -it --volumes-from dbdata --name db1 ubuntu

docker run -it --volumes-from dbdata --name db2 ubuntu

此時,容器db1和db2挂載同一個資料卷到/dbdata目錄。三個容器任何一個在該目錄寫入,其他容器都可以看到。

3,利用資料卷容器遷移資料

  • 備份

使用下面到指令來備份dbdata資料卷容器到資料卷:

docker run --volumes-from dbdata -v /bk:/bk --name worker ubuntu tar cvf /bk/bk.tar /dbdata

  • 恢複

首先建立一個帶有資料卷到容器:

docker run -it -v /dbdata --name dbdata2 ubuntu /bin/bash

然後建立一個新的容器,挂載dbdata2容器,将bk.tar解壓到容器中:

docker run --volumes-from dbdata2  -v /bk:/bk ubuntu tar xvf /bk/bk.tar

繼續閱讀