1. 程式人生 > >Docker存儲卷

Docker存儲卷

ont sbin tin 使用方式 lib64 pri mage home nac

docker存儲卷:

docker容器卷的使用方式:
1 Docker 管理卷:

docker run -it --name [名稱] -v [docker內部的卷] [鏡像名稱]
具體使用:
docker run -it --name testvolume -d -v /data/mydata 75835a67d134
查看存儲卷映射的目錄:
命令:docker inspect f878a628f152

"Mounts": [
   {
    "Type": "volume",
    "Name": "dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b", --卷的uuid
    "Source": "/var/lib/docker/volumes/dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b/_data", --宿主機中的所在位置
    "Destination": "/data/mydata", --容器中的目錄
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
            }
測試驗證是否關聯:
在宿主機目錄中創建測試文件:
[root@www10:23:05_data]#pwd
/var/lib/docker/volumes/dd91ef9ae17175499d490c36e70033e4701a2d66337f8e6435503bd9ddd1811b/_data
[root@www10:23:06_data]#echo "holle world" > test.html

在容器中相對應目錄查詢:
[root@f878a628f152 /]# cd data/mydata/
[root@f878a628f152 mydata]# ls
[root@f878a628f152 mydata]# ls
test.html

在容器中添加一些內容:
[root@f878a628f152 mydata]# echo hello yl >> test.html 
[root@f878a628f152 mydata]# cat test.html 
holle world
hello yl

在宿主機中查看:
[root@www10:23:45_data]#cat test.html 
holle world
hello yl

當使用--rm 一次性啟動的時候退出時候,會一並刪除宿主機目錄中的數據
當使用 -d 做後臺進入運行的時候,退出後刪除容器不會 目錄中數據不會丟失!

2 綁定掛載卷:
docker run -it -v [宿主機中目錄]:[容器中目錄] --name [名稱] [鏡像名稱]
具體使用:
docker run -it -v /data/dockerdir:/data/mydata --name b2 75835a67d134
查看卷信息:
"Mounts": [
 {
     "Type": "bind",
     "Source": "/data/dockerdir", ---宿主機目錄
     "Destination": "/data/mydata", --容器中目錄
     "Mode": "",
     "RW": true,
     "Propagation": "rprivate"
  }

當容器刪除後,數據依然存在:
[root@www10:36:22dockerdir]#docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d05a6a77992a        75835a67d134        "/bin/bash"         5 minutes ago       Exited (0) 22 seconds ago                       b2
[root@www10:36:24dockerdir]#docker rm b2
b2
[root@www10:36:30dockerdir]#docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@www10:36:32dockerdir]#ls
test.html
[root@www10:36:49dockerdir]#cat test.html 
hello world
hello yl

再次啟動時即是更換容器內部綁定目錄也可以使用數據:
[root@www10:36:51dockerdir]#docker run -it -v /data/dockerdir:/data/web --rm  --name b2 75835a67d134
[root@84f4e4aa6a49 /]# ls
anaconda-post.log  bin  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@84f4e4aa6a49 /]# cd data/
[root@84f4e4aa6a49 data]# ls
web
[root@84f4e4aa6a49 data]# cd web/
[root@84f4e4aa6a49 web]# ls
test.html
..................................................................

使用模板方式過濾信息:
docker inspect -f {{.Mounts}} [鏡像名稱]

.................................................
多個docker容器可以關聯到一個宿主機目錄!

測試:
啟用兩個容器:
docker run -it --name b1 -d -v /data/dockerdir:/data/web 75835a67d134

docker run -it --name b2 -d -v /data/dockerdir:/data/web 75835a67d134

[root@www11:01:26~]#docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
84c3bd9718e0        75835a67d134        "/bin/bash"         5 seconds ago       Up 4 seconds                            b2
d8a8f4203f13        75835a67d134        "/bin/bash"         16 seconds ago      Up 15 seconds                           b1

進入目錄後分別在兩個目錄中創建文件:
b1中創建文件:
[root@d8a8f4203f13 web]# echo hello jim > test12.txt
[root@d8a8f4203f13 web]# ls
index.html  test12.txt  test.html
[root@d8a8f4203f13 web]# cat test12.txt 
hello jim

b2中創建文件:
[root@84c3bd9718e0 web]# echo hello test > index.html
[root@84c3bd9718e0 web]# ls
index.html  test.html

宿主機目錄中查看:
[root@www11:01:28~]#cd /data/dockerdir/
[root@www11:09:30dockerdir]#ls
index.html  test12.txt  test.html

刪除docker後查看宿主機目錄數據一樣存在!

...............................................................
docker復制存儲卷路徑:

如何復制:具體使用
容器b1:
docker run -it --name b2 -d -v /data/dockerdir:/data/web 75835a67d134
不用啟動,只需要存在即可!
容器b2:
docker run -it --name b2 --volumes-from b1 75835a67d134

在共享網絡:
docker run --name t2 --network container:t1 -it --rm b2

Docker存儲卷