日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker基础---数据卷volumes

發布時間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • $ sudo docker run -d --volumes-from dbdata --name db2 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。