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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Docker中数据管理

發布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker中数据管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker數據管理

  • 生產環境中,對數據進行持久化,或者需要在多個容器直接進行數據共享,這必然涉及到容器的一些數據管理的操作。
  • 容器中數據管理主要有兩種方式:
    • 數據卷(Data Volumes):容器內數據直接映射到本地的主機環境
    • 數據卷容器(Data Volume Containers):使用特定的容器維護數據卷

數據卷

  • 數據集是一個可停過容器使用的特殊的文件目錄,他將主機操作系統目錄直接映射進容器,類似Linux中的mount操作。
  • 數據卷提供很多有用的特性如下:
    • 數據集可以在容器之間共享和重用,容器間傳遞數據將變得高效方便
    • 對數據卷內數據的修改會立刻生效,無論是容器內部的操作還是本地文件之間修改
    • 對書籍的更新不會影響鏡像,解耦了應用和數據
    • 數據卷會一直存在,直到沒有容器使用,可以安全的卸載它
  • 如下使用案例
  • 在容器中創建一個數據卷
    • 在Docker run命令中使用 -v參數標記可以在容器內創建一個數據卷。多次重復使用-v 標記可以創建多個數據卷。
    • 現在使用training/webapp 鏡像創建一個web容器,并創建一個數據卷掛載到容器的/webapp目錄:
    docker run -p 80:80 --name web -d -v /webapp training/webapp python app.py

    • 如上命令,在本地鏡像倉庫中沒有對應鏡像時候,會先自動下載
    • -p 指定將容器服務暴露的端口,是自動映射到本地主叫的臨時端口80
    • -d 指定在后臺運行
    • –name 指定容器啟動后的別名
  • 掛載一個主機目錄作為數據卷
    • 使用-v標記也可以指定掛載一個本地以已經有的目錄到容器中去作為數據卷,如下命令(推薦此種方式)
    docker run -d -p 81:81 --name web -v /src/webapp:/opt/webapp training/webapp python app.py
    • 以上命令中加載主機的/src/webapp目錄到容器的/opt/webapp目錄
    • 這個功能在進行測試的時候比較方便,比如我們可以將一些程序或者數據預先放到本地的目錄中,然后在容器中運行和使用。另外,本地目錄的路徑必須是絕對路徑,如果目錄不存在,Docker會自動創建。
    • Docker掛載數據卷的默認權限是讀寫(RW),我們可以通過ro指定位只讀:
    docker run -d -p 80:80 -name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
    • 如上命令,添加:ro后,容器內部對所掛載的數據卷內的數據就無法修改了。
  • 掛載一個本地直接文件作為數據卷
    • -v 標記也可以從主機掛載單個文件到容器中作為數據卷(不推薦方式)。
    docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
    • 如上就可以距離在容器輸入過的命令歷史
    • 問題:如果直接掛載一個文件到容器,使用文件編輯工具,例如vi或者sed–in-place的時候,可能造成文件inode的改變,從Docker1.1.0開始,這回導致報錯。所以推薦的方式是直接掛載文件所在目錄。

    數據卷容器

    • 現在我們需要在多個容器之間共享同一個持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器也是一個容器,他的功能是用來提供數據卷供其他容器掛載。
    • 首先創建一個數據卷容器dbdata,并在其中創建一個數據卷掛載到/dbdata:
    docker run -it -v /dbdata --name dbdata ubuntu
    • 查看/dbdata目錄:
    • 如上已經有dbdata目錄,我們可以在其他容器中使用–volumes-form來掛載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目錄。三個容器任何一方在該目錄下的寫入,其他容器都可以看到。
    • 示例:在dbdata容器中創建test文件
    • 在db1 容器中查看其目錄下的dbdata文件中內容:
    • 我們也可以多次使用–volumes-from參數來從多個容器掛載多個數據卷。還可以從其他已經掛載了容器卷的容器來掛載數據卷。
    • 問題:
      • 使用–volumes-from參數所掛載數據卷的容器自身并不需要保持在運行狀態
      • 如果刪除了掛載的容器,包括上面的dbdata, db1, db2,數據卷并不會被自動刪除。如果要刪除一個數據卷,必須在刪除最后一個還掛載著他的容器時顯示的使用docker rm -v 命令指定同時刪除關聯的容器
      • 使用數據卷容器可以讓用戶在容器之間自由的升級和移動數據卷。

    利用數據卷來遷移數據

    • 可以利用數據卷容器對啟動的數據卷進行備份,恢復,這樣實現數據的遷移
    備份
    • 使用以下買那個了備份dbdata數據卷容器內的數據卷
    docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar dbdata
    • 如上命令:
      • 利用ubuntu鏡像創建一個容器worker。使用–volumes-from dbdata參數來容worker容器掛載dbdata容器的數據卷(即dbdata數據卷);
      • 使用 -v ${pwd}:/backup參數來掛載本地的當前目錄到worker容器的/backup目錄。
      • worker容器啟動后,使用tar cvf /backuo.backuo.tar/dbdata命令來將/dbdata下內容備份為容器內的/backup/backup.tar,即宿主機當前目錄下的backup.tar
      • 執行后可以看到宿主機/backup目錄下出現backup.tar
    恢復
    • 如果需要將數據恢復到一個容器,可以按一下步驟:
    • 創建一個帶有數據卷的容器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

    總結

    • Docker在設計上就考慮過數據問題,為數據管理提供了充分操作支持
    • 以上通過備份,恢復,共享機制,即使容器在運行中出現故障,用戶也不必擔心數據發生丟失,只要快速重新創建容器即可。
    • 生產環境中,推薦使用數據卷匯總數據卷容器以外,我們還需要定期將主機的本地數據進行備份,或者使用支持容錯的存儲系統,包括RAID或者分布式文件系統HDFS等。

    上一篇:SpringCloud + Docker
    下一篇:使用Dockerfile創建鏡像

    總結

    以上是生活随笔為你收集整理的Docker中数据管理的全部內容,希望文章能夠幫你解決所遇到的問題。

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