1. 程式人生 > >學習Docker(2017-10-7)

學習Docker(2017-10-7)

本節目錄:
1. 資料管理
- 資料卷
- 資料卷容器
- 備份、恢復、遷移資料卷

資料管理

本小節學習在 Docker 內部以及容器之間管理資料,主要方式:
1. 資料卷(Data volumes)
2. 資料卷容器 (Data volume containers)

資料卷

資料卷是一個提供一個或者多個容器使用的 特殊目錄 它繞過 UFS ,可以提供很多有用的特性:
1. 資料卷可以在容器之間共享和重用
2. 對資料卷的更新可以立馬生效
3. 資料卷的更新不會影響映象
4. 資料卷預設一直存在,即使容器被刪除

建立一個數據卷
在使用 docker run 命令,使用 -v 標記來建立一個數據卷並掛載到容器裡。在一次 run 中多次使用可以掛載多個數據卷。

例項:
下面建立一個名為 web 的容器,並加裝一個數據捲到容器的 /webapp

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

注意: 也可以在 Dockerfile 中使用 VOLUME 來新增一個或者多個新的捲到由該映象建立的任意容器。

刪除資料卷

資料卷是被設計用來持久化資料的,它的生命週期獨立於容器,Docker 不會在容器被刪除後自動刪除資料卷,也不出現垃圾回收機制來處理沒有任何容器引用的資料卷。如果需要在刪除容器的同時移除資料卷。可以在刪除命令加 -v 引數,docker rm -v 命令刪除容器移除資料卷

掛載一個主機目錄作為資料卷

-v 標記也可以指定掛載一個本地主機的目錄到容器中去

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

上面的命令載入主機 /src/webapp 目錄到容器的 /opt/webapp目錄。

注意: Dockerfile 不支援這種用法,這是因為Dockerfile 是為了移植和分享用的。然而,不同作業系統的路徑格式不一樣,所以現在還不能支援

Docker 掛載資料卷預設許可權是讀寫,使用者也可以通過:ro指定為只讀

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

加了 :ro 之後,就掛載為只讀了

檢視資料卷的具體資訊

docker inspect web ...

在輸出的內容中找到其中和資料卷相關的部分

資料卷容器

如果你有一些持續更新的資料需要在容器之間共享,最好建立資料卷容器。專門提供資料卷為其他容器掛載的。

例項:建立 dbdata 資料卷容器

docker run -d -v /dbdata --name dbdata  training/postgres echo Data-only container for postgres

在其他容器中 使用 –volumns-from 來掛載dbdata 容器中的資料卷

docker run -d -volumns-from dbdata --name db1 training/postgres

docker run -d -volumns-from dbdata --name db2 training/postgres

docker run -d -volumns-from db1 --name db3 training/postgres

注意:使用 –volumes-from 引數所掛載資料卷的容器自己並不需要保持在執行狀態。

利用資料卷容器來備份、恢復、遷移資料卷

備份

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

建立一個掛載 dbdata 的容器,並從主機掛載到 backup 目錄,之後執行 tar 命令生成一個 .tar 檔案的備份

恢復
如果恢復一個數據到一個容器,首先建立帶空資料卷的容器 dbdata2

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

然後建立另一個容器,掛載 dbdata2 容器卷中的資料卷,並解壓備份檔案到掛載容器卷中。

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

為了檢視或者驗證恢復的資料,可以再啟動一個容器掛載同樣的容器捲來檢視

docker run --volumes-from dbdata2 busybox /bin/ls /dbdata

┭┮﹏┭┮ 好想換成 Linux ,慢慢發現 windows 真的適合那種無腦操作的人….