<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                到目前為止,我們已經介紹了docker的一些基本概念,了解了如何使用docker鏡像,以及容器之間如何通過網絡連接。本節,我們來討論如何管理容器和容器間的共享數據。 接下來,我們將主要介紹Docker管理數據的兩種主要的方法: * 數據卷 * 數據卷容器 ## 數據卷 數據卷是指在存在于一個或多個容器中的特定目錄,此目錄能夠繞過[Union File System](http://docs.docker.com/terms/layer/#ufs-def)提供一些用于持續存儲或共享數據的特性。 * 數據卷可在容器之間共享或重用 * 數據卷中的更改可以直接生效 * 數據卷中的更改不會包含在鏡像的更新中 * 數據卷的生命周期一直持續到沒有容器使用它為止 ## 添加一個數據卷 你可以在`docker run`命令中使用`-v`標識來給容器內添加一個數據卷,你也可以在一次`docker run`命令中多次使用`-v`標識掛載多個數據卷。現在我們在web容器應用中創建單個數據卷。 ~~~ $ sudo docker run -d -P --name web -v /webapp training/webapp python app.py ~~~ 這會在容器內部創建一個新的卷`/webapp` > 注:類似的,你可以在`Dockerfile`中使用`VOLUME`指令來給創建的鏡像添加一個或多個數據卷。 ## 掛載一個主機目錄作為卷 使用`-v`,除了可以創建一個數據卷,還可以掛載本地主機目錄到容器中: ~~~ $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py ~~~ 這將會把本地目錄`/src/webapp`掛載到容器的`/opt/webapp`目錄。這在做測試時是非常有用的,例如我們可以掛載宿主機的源代碼到容器內部,這樣我們就可以看到改變源代碼時的應用時如何工作的。宿主機上的目錄必須是絕對路徑,如果目錄不存在docker會自動創建它。 > 注:出于可移植和分享的考慮,這種方法不能夠直接在`Dockerfile`中實現。作為宿主機目錄——其性質——是依賴于特定宿主機的,并不能夠保證在所有的宿主機上都存在這樣的特定目錄。 docker默認情況下是對數據卷有讀寫權限,但是我們通過這樣的方式讓數據卷只讀: ~~~ $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py ~~~ 這里我們同樣掛載了`/src/webapp`目錄,只是添加了`ro`選項來限制它只讀。 ## 將宿主機上的特定文件掛載為數據卷 除了能掛載目錄外,`-v`標識還可以將宿主機的一個特定文件掛載為數據卷: ~~~ $ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash ~~~ 上述命令會在容器中運行一個bash shell,當你退出此容器時在主機上也能夠看到容器中bash的命令歷史。 > 注:很多文件編輯工具如`vi`和`sed --in-place`會導致inode change。Docker v1.1.0之后的版本,會產生一個錯誤:“sed cannot rename ./sedKdJ9Dy: Device or resource busy”。這種情況下如果想要更改掛載的文件,最好是直接掛載它的父目錄。 ## 創建、掛載數據卷容器 如果你想要容器之間數據共享,或者從非持久化容器中使用一些持久化數據,最好創建一個指定名稱的數據卷容器,然后用它來掛載數據。 讓我們創建一個指定名稱的數據卷容器: ~~~ $ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres ~~~ 你可以在另外一個容器使用`--volumes-from`標識,通過剛剛創建的數據卷容器來掛載對應的數據卷。 ~~~ $ sudo docker run -d --volumes-from dbdata --name db1 training/postgres ~~~ 可以將對應的數據卷掛載到更多的容器中: ~~~ $ sudo docker run -d --volumes-from dbdata --name db2 training/postgres ~~~ 當然,您也可以對一個容器使用多個`--volumes-from`標識,來將多個數據卷橋接到這個容器中。 數據卷容器是可以進行鏈式擴展的,之前的`dbdata`數據卷依次掛載到了dbdata 、db1和db2容器,我們還可以使用這樣的方式來將數據卷掛載到新的容器db3: ~~~ $ sudo docker run -d --name db3 --volumes-from db1 training/postgres ~~~ 即使你刪除所有de 掛載了數據卷dbdata的容器(包括最初的`dbdata`容器和后續的`db1`和`db2`),數據卷本身也不會被刪除。要刪在磁盤上刪除這個數據卷,只能針對最后一個掛載了數據卷的容器顯式地調用`docker rm -v`命令。這種方式可使你在容器之間方便的更新和遷移數據。 ## 備份、恢復或者遷移數據卷 數據卷還可以用來備份、恢復或遷移數據。為此我們使用`--volumes-from`參數來創建一個掛載數據卷的容器,像這樣: ~~~ $ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata ~~~ 這里我們啟動了一個掛載`dbdata`卷的新容器,并且掛載了一個本地目錄作為`/backup`卷。最后,我們通過使用tar命令將`dbdata`卷的內容備份到容器中的`/backup`目錄下的`backup.tar`文件中。當命令完成或者容器停止,我們會留下我們的`dbdata`卷的備份。 然后,你可以在同一容器或在另外的容器中恢復此數據。創建一個新的容器 ~~~ $ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash ~~~ 然后在新的容器中的數據卷里un-tar此備份文件。 ~~~ $ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar ~~~ 你可以對熟悉的目錄應用此技術,來測試自動備份、遷移和恢復。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看