docker基础---数据卷volumes
1、數據卷
數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
- 數據卷可以在容器之間共享和重用
- 對數據卷的修改會立馬生效
- 對數據卷的更新,不會影響鏡像
- 卷會一直存在,直到沒有容器使用
*數據卷的使用,類似于 Linux 下對目錄或文件進行 mount。
1.1 創建一個數據卷
在用?docker run?命令的時候,使用?-v?標記來創建一個數據卷并掛載到容器里。在一次 run 中多次使用可以掛載多個數據卷。
下面創建一個 web 容器,并加載一個數據卷到容器的?/webapp?目錄。
docker run -d -P --name web -v /webapp training/webapp python app.py*注意:也可以在 Dockerfile 中使用?VOLUME?來添加一個或者多個新的卷到由該鏡像創建的任意容器。
1.2 掛載一個主機目錄作為數據卷
使用?-v?標記也可以指定掛載一個本地主機的目錄到容器中去。
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py上面的命令加載主機的?/src/webapp?目錄到容器的?/opt/webapp?目錄。這個功能在進行測試的時候十分方便,比如用戶可以放置一些程序到本地目錄中,來查看容器是否正常工作。本地目錄的路徑必須是絕對路徑,如果目錄不存在 Docker 會自動為你創建它。
*注意:Dockerfile 中不支持這種用法,這是因為 Dockerfile 是為了移植和分享用的。然而,不同操作系統的路徑格式不一樣,所以目前還不能支持。
Docker 掛載數據卷的默認權限是讀寫,用戶也可以通過?:ro?指定為只讀。
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py加了?:ro?之后,就掛載為只讀了。
1.3 掛載一個本地主機文件作為數據卷
-v?標記也可以從主機掛載單個文件到容器中
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash這樣就可以記錄在容器輸入過的命令了。
*注意:如果直接掛載一個文件,很多文件編輯工具,包括?vi?或者?sed --in-place,可能會造成文件 inode 的改變,從 Docker 1.1 .0起,這會導致報錯誤信息。所以最簡單的辦法就直接掛載文件的父目錄。
2、數據卷容器
如果你有一些持續更新的數據需要在容器之間共享,最好創建數據卷容器。
數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。
首先,創建一個命名的數據卷容器 dbdata:
docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres然后,在其他容器中使用?--volumes-from?來掛載 dbdata 容器中的數據卷。?
docker run -d --volumes-from dbdata --name db1 training/postgres還可以使用多個?--volumes-from?參數來從多個容器掛載多個數據卷。 也可以從其他已經掛載了數據卷的容器來掛載數據卷。
docker run -d --name db3 --volumes-from db1 training/postgres*注意:使用?--volumes-from?參數所掛載數據卷的容器自己并不需要保持在運行狀態。
如果刪除了掛載的容器(包括 dbdata、db1 和 db2),數據卷并不會被自動刪除。如果要刪除一個數據卷,必須在刪除最后一個還掛載著它的容器時使用?docker rm -v?命令來指定同時刪除關聯的容器。 這可以讓用戶在容器之間升級和移動數據卷。具體的操作將在下一節中進行講解。
3、利用數據卷容器來備份、恢復、遷移數據卷
可以利用數據卷對其中的數據進行進行備份、恢復和遷移。
3.1 備份
首先使用?--volumes-from?標記來創建一個加載 dbdata 容器卷的容器,并從本地主機掛載當前到容器的 /backup 目錄。命令如下:
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata容器啟動后,使用了?tar?命令來將 dbdata 卷備份為本地的?/backup/backup.tar。
3.2 恢復
如果要恢復數據到一個容器,首先創建一個帶有數據卷的容器 dbdata2。
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash然后創建另一個容器,掛載 dbdata2 的容器,并使用?untar?解壓備份文件到掛載的容器卷中。
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
轉載于:https://www.cnblogs.com/fan-gx/p/10765493.html
總結
以上是生活随笔為你收集整理的docker基础---数据卷volumes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现二叉树
- 下一篇: Subversion基本操作