方槍槍的java世界

          不要因為風雨飄落就停止了你的腳步,真正的得失就在你的心中。 做喜歡做的事,不輕言放棄!

          Docker學習筆記(六)容器數據管理

          八、容器數據管理

          docker管理數據的方式有兩種:

          • 數據卷
          • 數據卷容器

          8.1 數據卷

          數據卷是一個或多個容器專門指定繞過Union File System的目錄,為持續性或共享數據提供一些有用的功能:

          • 數據卷可以在容器間共享和重用
          • 數據卷數據改變是直接修改的
          • 數據卷數據改變不會被包括在容器中
          • 數據卷是持續性的,直到沒有容器使用它們

          添加一個數據卷

          你可以使用-v選項添加一個數據卷,或者可以使用多次-v選項為一個 docker 容器運行掛載多個數據卷。

          $ sudo docker run --name data -v /data -t -i ubuntu:14.04 /bin/bash # 創建數據卷綁定到到新建容器,新建容器中會創建 /data 數據卷 bash-4.1# ls -ld /data/
          drwxr-xr-x 2 root root 4096 Jul 23 06:59 /data/
          bash-4.1# df -Th
          Filesystem    Type    Size  Used Avail Use% Mounted on
          ... ...
                        ext4     91G  4.6G   82G   6% /data

          創建的數據卷可以通過docker inspect獲取宿主機對應路徑

          $ sudo docker inspect data
          ... ... "Volumes": { "/data": "/var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9" }, # 可以看到創建的數據卷宿主機路徑 ... ...

          或者直接指定獲取

          $ sudo docker inspect --format="{{ .Volumes }}" data
          map[/data: /var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9]

          掛載宿主機目錄為一個數據卷

          -v選項除了可以創建卷,也可以掛載當前主機的一個目錄到容器中。

          $ sudo docker run --name web -v /source/:/web -t -i ubuntu:14.04 /bin/bash
          bash-4.1# ls -ld /web/
          drwxr-xr-x 2 root root 4096 Jul 23 06:59 /web/
          bash-4.1# df -Th
          ... ...
                        ext4     91G  4.6G   82G   6% /web
          bash-4.1# exit 

          默認掛載卷是可讀寫的,可以在掛載時指定只讀

          $ sudo docker run --rm --name test -v /source/:/test:ro -t -i ubuntu:14.04 /bin/bash

          8.2 創建和掛載一個數據卷容器

          如果你有一些持久性的數據并且想在容器間共享,或者想用在非持久性的容器上,最好的方法是創建一個數據卷容器,然后從此容器上掛載數據。

          創建數據卷容器

          $ sudo docker run -t -i -d -v /test --name test ubuntu:14.04 echo hello

          使用--volumes-from選項在另一個容器中掛載 /test 卷。不管 test 容器是否運行,其它容器都可以掛載該容器數據卷,當然如果只是單獨的數據卷是沒必要運行容器的。

          $ sudo docker run -t -i -d --volumes-from test --name test1 ubuntu:14.04 /bin/bash

          添加另一個容器

          $ sudo docker run -t -i -d --volumes-from test --name test2 ubuntu:14.04 /bin/bash

          也可以繼承其它掛載有 /test 卷的容器

          $ sudo docker run -t -i -d --volumes-from test1 --name test3 ubuntu:14.04 /bin/bash

          非常詳細的 Docker 學習筆記

          8.3 備份、恢復或遷移數據卷

          備份

          $ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /test
          tar: Removing leading `/' from member names
          /test/
          /test/b
          /test/d
          /test/c
          /test/a

          啟動一個新的容器并且從test容器中掛載卷,然后掛載當前目錄到容器中為 backup,并備份 test 卷中所有的數據為 test.tar,執行完成之后刪除容器--rm,此時備份就在當前的目錄下,名為test.tar。

          $ ls # 宿主機當前目錄下產生了 test 卷的備份文件 test.tar test.tar

          恢復

          你可以恢復給同一個容器或者另外的容器,新建容器并解壓備份文件到新的容器數據卷

          $ sudo docker run -t -i -d -v /test --name test4 ubuntu:14.04  /bin/bash $ sudo docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C / # 恢復之前的文件到新建卷中,執行完后自動刪除容器 test/ test/b test/d test/c test/a

          8.4 刪除 Volumes

          Volume 只有在下列情況下才能被刪除:

          • docker rm -v刪除容器時添加了-v選項
          • docker run --rm運行容器時添加了--rm選項

          否則,會在/var/lib/docker/vfs/dir目錄中遺留很多不明目錄。

          參考文檔:

          posted on 2016-12-27 21:39 做強大的自己 閱讀(139) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 额济纳旗| 辽阳县| 昭通市| 昌黎县| 德昌县| 富裕县| 平乐县| 景洪市| 临夏县| 浦东新区| 象山县| 唐河县| 营山县| 光山县| 濉溪县| 诏安县| 樟树市| 左云县| 安西县| 都江堰市| 商河县| 深泽县| 柳州市| 盐源县| 旌德县| 梁河县| 长兴县| 循化| 荔波县| 江陵县| 大兴区| 武鸣县| 岱山县| 中江县| 轮台县| 时尚| 保德县| 大连市| 孙吴县| 宁津县| 桂平市|