Docker容器数据卷-Volume详解
Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。操作Docker数据卷,需要理解以下几点:
============================================================================
1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
============================================================================
2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。
============================================================================
3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。这样,即使删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。
============================================================================
4)不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的。备份方法: 创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。如下:
# docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
============================================================================
5)可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,它是[host-dir]:[container-dir]:[rw|ro]这样格式的,其中host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。
Docker Volume数据卷可以实现:
-> 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
-> 绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
-> 数据卷可以在容器间共享和重用数据
-> 数据卷可以在宿主和容器间共享数据
-> 数据卷数据改变是直接修改的
-> 数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失。
Docker数据持久化:
容器在运行期间产生的数据是不会写在镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据。如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据。
一、创建一个数据卷
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
如下为容器添加一个数据卷,并将容器名改为data。这个数据卷在容器里的目录是/opt/data[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/ubuntu latest 0ef2e08ed3fa 2 weeks ago 130 MB[root@localhost ~]# docker run --name data -v /opt/data -t -i docker.io/ubuntu /bin/bashroot@2b9aebcf6ce8:/# cd /opt/data/root@2b9aebcf6ce8:/opt/data# lsroot@2b9aebcf6ce8:/opt/data# echo "123" > 123root@2b9aebcf6ce8:/opt/data# echo "123123" > 123123root@2b9aebcf6ce8:/opt/data# ls123 123123[root@localhost volumes]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2b9aebcf6ce8 docker.io/ubuntu "/bin/bash" 49 seconds ago Up 48 seconds data在宿主机上,查看对应上面的那个数据卷的目录路径:[root@localhost ~]# docker inspect data|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data",[root@localhost ~]# ls /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data123 123123[root@localhost ~]# echo "asdhfjashdfjk" >> /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data/123[root@localhost ~]#root@2b9aebcf6ce8:/opt/data# ls123 123123root@2b9aebcf6ce8:/opt/data# cat 123123asdhfjashdfjk |
二、挂载宿主机文件或目录到容器数据卷
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
可以直接挂载宿主机文件或目录到容器里,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据。注意:-v后面的映射关系是"宿主机文件/目录:容器里对应的文件/目录",其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。数据卷权限:挂载的数据默认为可读写权限。但也可以根据自己的需求,将容器里挂载共享的数据设置为只读,这样数据修改就只能在宿主机上操作。如下实例:1)挂载宿主机文件到容器上[root@localhost ~]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103[root@localhost ~]# docker run -t -i --name test -v /etc/web.list:/etc/web.list:ro docker.io/centos /bin/bash[root@e21a3fefa3ae /]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103[root@e21a3fefa3ae /]# echo "192.168.1.115" >> /etc/web.listbash: /etc/web.list: Read-only file system[root@e21a3fefa3ae /]# 在宿主机上修改共享数据[root@localhost ~]# echo "192.168.1.115" >> /etc/web.list[root@localhost ~]# [root@e21a3fefa3ae /]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103192.168.1.1152)挂载宿主机目录到容器上[root@localhost ~]# mkdir /var/huanqiupc[root@localhost ~]# echo "test" > /var/huanqiupc/test[root@localhost ~]# echo "test1" > /var/huanqiupc/test1[root@localhost ~]# docker run -t -i --name hqsb -v /var/huanqiupc:/opt/huantime docker.io/centos /bin/bash[root@87cf93ce46a9 /]# cd /opt/huantime/[root@87cf93ce46a9 huantime]# lstest test1[root@87cf93ce46a9 huantime]# cat testtest[root@87cf93ce46a9 huantime]# cat test1test1[root@87cf93ce46a9 huantime]# echo "1231" >>test[root@87cf93ce46a9 huantime]# echo "44444" >>test1宿主机上查看[root@localhost ~]# cat /var/huanqiupc/testtest1231[root@localhost ~]# cat /var/huanqiupc/test1test1444443)挂载多个目录[root@localhost ~]# mkdir /opt/data1 /opt/data2[root@localhost ~]# echo "123456" > /opt/data1/test1[root@localhost ~]# echo "abcdef" > /opt/data2/test2[root@localhost ~]# docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -t -i docker.io/ubuntu /bin/bashroot@cf2d57b9bee1:/# ls /var/www/data1test1root@cf2d57b9bee1:/# ls /var/www/data2test2root@cf2d57b9bee1:/# cat /var/www/data1/test1123456root@cf2d57b9bee1:/# cat /var/www/data2/test2abcdefroot@cf2d57b9bee1:/# echo "date1" >> /var/www/data1/test1root@cf2d57b9bee1:/# echo "date2" >> /var/www/data2/test2bash: /var/www/data2/test2: Read-only file systemroot@cf2d57b9bee1:/# |
三、创建数据卷容器
启动一个名为xqsj_Container容器,此容器包含两个数据卷/var/volume1和/var/volume2(这两个数据卷目录是在容器里的,容器创建的时候会自动生成这两目录)
|
1
2
3
4
5
6
7
8
9
10
|
注意一个细节:下面的创建命令中,没有加-t和-i参数,所以这个容器创建好之后是登陆不了的!-i:表示以“交互模式”运行容器-t:表示容器启动后会进入其命令行[root@linux-node2 ~]# docker run -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash[root@linux-node2 ~]#所以要想创建容器后能正常登陆,就需要添加上面两个参数[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash[root@73a34f3c1cd9 /]# |
查看宿主机上与数据卷对应的目录路径:
|
1
2
3
4
|
[root@localhost ~]# docker inspect xqsj_Container|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/b8d2e5bcadf2550abd36ff5aa544c721a45464a4406fb50979815de773086627/_data", "Source": "/var/lib/docker/volumes/a34fa3a0a7a2f126b0d30a32b1034f20917ca7bd0dda346014d768b5ebb68f6b/_data",由上面命令结果可以查到,两个数据卷/var/volume1和/var/volume2下的数据在/var/lib/docker/volumes/下对于的两个目录的_data下面 |
创建App_Container容器,挂载xqsj_Container容器中的数据卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from xqsj_Container --name App_Container centos /bin/bash
[root@b9891bcdfed0 /]# ls /var/volume1 //发现这两个数据卷都存在
[root@b9891bcdfed0 /]# ls /var/volume2
[root@b9891bcdfed0 /]# echo "this is volume1" > /var/volume1/test1
[root@b9891bcdfed0 /]# echo "this is volume2" > /var/volume1/test2
可以再创建一个容器,挂载App_Container中从xqsj_Container挂载的数据卷。当然也可以直接挂载初始的xqsj_Container容器数据卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from App_Container --name LastApp_Container centos /bin/bash
[root@b4c27e360614 /]# ls /var/volume1
test1
[root@b4c27e360614 /]# ls /var/volume2
test2
[root@b4c27e360614 /]# cat /var/volume1/test1
this is volume1
[root@b4c27e360614 /]# cat /var/volume2/test2
this is volume2
即便是删除了初始的数据卷容器xqsj_Container,或是删除了其它容器,但只要是有容器在使用该数据卷,那么它里面的数据就不会丢失!(除非是没有容器在使用它们)
四、备份数据卷
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
$ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /testtar: Removing leading `/' from member names/test//test/b/test/d/test/c/test/a 以上命令表示:启动一个新的容器并且从test容器中挂载卷,然后挂载当前目录到容器中为backup,并备份test卷中所有的数据为test.tar,执行完成之后删除容器--rm,此时备份就在当前的目录下,名为test.tar。注意:后面的/test是数据卷的目录路径(即数据卷创建时在容器里的路径) $ ls宿主机当前目录下产生了test卷的备份文件test.tar ---------------------------------------------看看下面的一个实例---------------------------------------------先创建一个容器wang,包含两个数据卷/var/volume1和/var/volume2(这两个目录是在容器里的数据卷路径)[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name wang docker.io/centos /bin/bash[root@83eb43492ae7 /]# 根据Docker的数据持久化之数据卷容器可知,上面创建的wang数据卷容器挂载了/var/volume1和/var/volume2两个目录然后在数据卷里写些数据,以供测试。[root@83eb43492ae7 /]# cd /var/volume1[root@83eb43492ae7 volume1]# echo "test1" > test1[root@83eb43492ae7 volume1]# echo "test11" > test11[root@83eb43492ae7 volume1]# echo "test111" > test111[root@83eb43492ae7 volume1]# lstest1 test11 test111[root@83eb43492ae7 volume1]# cd ../volume2[root@83eb43492ae7 volume2]# echo "test2" > test2[root@83eb43492ae7 volume2]# echo "test22" > test22[root@83eb43492ae7 volume2]# echo "test222" > test222[root@83eb43492ae7 volume2]# lstest2 test22 test222[root@83eb43492ae7 volume2]# 然后进行这两个数据卷的备份[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES83eb43492ae7 docker.io/centos "/bin/bash" 2 minutes ago Up 2 minutes wang 现在开始进行数据卷的备份操作:为了利用数据卷容器备份,使用--volumes-from标记来创建一个加载wang容器卷的容器,并从主机挂载当前目录到容器的/backup目录。并备份wang卷中的数据,执行完成之后删除容器--rm,此时备份就在当前的目录下了。 1)备份wang容器中的/var/volume1数据卷数据<strong>(注意下面:命令中的-i和-t这两个参数加不加都可以;--rm加上,备份后就会自动删除这个容器,如果不加这个--rm参数,那么备份后的容器就会保留,docker ps -a就会查看到)</strong>[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1tar: Removing leading `/' from member names/var/volume1//var/volume1/test1/var/volume1/test11/var/volume1/test111 2)备份wang容器中的/var/volume2数据卷数据[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup2.tar /var/volume2tar: Removing leading `/' from member names/var/volume2//var/volume2/test2/var/volume2/test22/var/volume2/test222 3)备份wang容器中的/var/volume1和/var/volume2数据卷数据[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2tar: Removing leading `/' from member names/var/volume1//var/volume1/test1/var/volume1/test11/var/volume1/test111/var/volume2//var/volume2/test2/var/volume2/test22/var/volume2/test222[root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 这样,数据卷容器中的数据就备份完成了. 简言之就是:先创建一个容器,并挂载要备份的容器数据卷,再挂载数据卷(pwd):/backup目录到容器/bakcup,在容器中执行备份/data目录到/backup,也就是备份到宿主机$(pwd):/backup目录。 |
五、恢复或迁移数据卷
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
可以恢复给同一个容器或者另外的容器,新建容器并解压备份文件到新的容器数据卷$ 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 -----------------------------接着上面的实例进行数据卷恢复操作--------------------------[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES531c9d8adf4c docker.io/centos "/bin/bash" 2 minutes ago Up 44 seconds wang 1)恢复数据给同一个容器测了测试效果,先删除数据卷(注意:数据卷目录删除不了,只能删除其中的数据。)[root@localhost ~]# docker attach wang[root@531c9d8adf4c ~]# ls /var/volume1test1 test11 test111[root@531c9d8adf4c ~]# ls /var/volume2test2 test22 test222[root@531c9d8adf4c ~]# rm -rf /var/volume1 /var/volume2rm: cannot remove '/var/volume1': Device or resource busy rm: cannot remove '/var/volume2': Device or resource busy[root@531c9d8adf4c ~]# ls /var/volume2[root@531c9d8adf4c ~]# ls /var/volume1 现在进行数据卷恢复,恢复数据卷中的所有数据:[root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 注意-C后面的路径,这个路径表示将数据恢复到容器里的路径。命令中用"/",即表示将backup.tar中的数据解压到容器的/路径下。后面跟什么路径,就解压到这个路径下。因此这里用"/"[root@localhost ~]# docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 再次到容器里查看,发现数据卷里的数据已经恢复了[root@531c9d8adf4c ~]# ls /var/volume1test1 test11 test111[root@531c9d8adf4c ~]# ls /var/volume2test2 test22 test222 2)恢复数据给另外的容器,新建容器并解压备份文件到新的容器数据卷即新建一个容器huihui,将上面备份的数据卷数据恢复到这个新容器里。[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name huihui docker.io/centos /bin/bash[root@f6ff380e0b7f var]# ls /var/volume1[root@f6ff380e0b7f var]# ls /var/volume2 [root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 [root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES813afe297b60 docker.io/centos "/bin/bash" 17 seconds ago Up 16 seconds huihui 这里注意一下:新容器创建时挂载的数据卷路径最好是和之前备份的数据卷路径一致如下:1)新建容器挂载的数据卷只是备份数据卷的一部分,那么恢复的时候也只是恢复一部分数据。如下,新容器创建时只挂载/var/volume1[root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash[root@12dd8d742259 /]# ls /var/volume1/[root@12dd8d742259 /]# ls /var/volume2ls: cannot access /var/volume2: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# 查看容器,发现只恢复了/var/volume1的数据,/var/volume2数据没有恢复,因为没有容器创建时没有挂载这个。[root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash[root@12dd8d742259 /]# ls /var/volume1/[root@12dd8d742259 /]# ls /var/volume2ls: cannot access /var/volume2: No such file or directory 2)新容器创建时只挂载/var/volume2[root@localhost ~]# docker run -t -i -v /var/volume2 --name huihui docker.io/centos /bin/bash[root@da3a3d2c95e0 /]# ls /var/volume2/[root@da3a3d2c95e0 /]# ls /var/volume1ls: cannot access /var/volume1: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# [root@da3a3d2c95e0 /]# ls /var/volume1ls: cannot access /var/volume1: No such file or directory[root@da3a3d2c95e0 /]# ls /var/volume2/test2 test22 test222 3)如果新容器创建时挂载的数据卷目录跟之前备份的路径不一致[root@localhost ~]# docker run -t -i -v /var/huihui --name huihui docker.io/centos /bin/bash[root@9bad9b3bde71 /]# ls /var/huihui/[root@9bad9b3bde71 /]# 如果解压时-C后面跟的路径不是容器挂载的容器,那么数据恢复不了,如下[root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 发现容器内数据没有恢复[root@9bad9b3bde71 /]# ls /var/huihui/[root@9bad9b3bde71 /]# 但是如果解压时-C后面跟的是容器挂载的路径,数据就能正常恢复[root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/huihuivar/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# 发现容器内数据已经恢复了[root@9bad9b3bde71 /]# ls /var/huihui/var[root@9bad9b3bde71 /]# ls /var/huihui/var/volume1 volume2[root@9bad9b3bde71 /]# ls /var/huihui/var/volume1test1 test11 test111[root@9bad9b3bde71 /]# ls /var/huihui/var/volume2test2 test22 test222 |
六、删除数据卷
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Volume 只有在下列情况下才能被删除:1)docker rm -v删除容器时添加了-v选项2)docker run --rm运行容器时添加了--rm选项否则,会在/var/lib/docker/volumes目录中遗留很多不明目录。可以使用下面方式找出,然后删除_data目录下的数据文件[root@localhost volumes]# docker inspect huihui|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b/_data",可以使用 docker rm -v 命令在删除容器时删除该容器的卷。示例如下:[root@localhost volumes]# docker run -d -P --name huihui -v /www docker.io/centos69199905a74cb360935e32f4e99f7f11319f6aa36033a920aa0bae25874f5c69[root@localhost volumes]# docker volume lsDRIVER VOLUME NAMElocal 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330local 97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42blocal data_volume[root@localhost volumes]# docker rm -vf huihuihuihui[root@localhost volumes]# docker volume lsDRIVER VOLUME NAMElocal 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330local data_volume |
===================== Docker新版本出现docker volume 命令:创建数据卷 ======================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
Docker 新版本中引入了 docker volume 命令来管理 Docker volume。使用默认的 'local' driver 创建一个volume数据卷[root@localhost ~]# docker volume create --name kevinkevin[root@localhost ~]# docker volume lsDRIVER VOLUME NAMElocal kevin[root@localhost ~]# ll /var/lib/docker/volumestotal 24drwxr-xr-x 3 root root 19 Oct 28 00:32 kevin-rw------- 1 root root 32768 Oct 28 00:32 metadata.db使用这个名为kevin的数据卷[root@localhost ~]# docker run -d -P --name test1 -v kevin:/volume docker.io/centos375ef74722404f5c52fde9f2ea7ea322c57e07fbac0b0e69825f077328fdb363[root@localhost ~]# docker inspect test1......... "Mounts": [ { "Type": "volume", "Name": "kevin", "Source": "/var/lib/docker/volumes/kevin/_data", "Destination": "/volume", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" }即将kevin数据卷对应在本机上的目录/var/lib/docker/volumes/kevin/_data挂载给容器内的 /volume 目录。 |
Docker容器数据卷-Volume详解的更多相关文章
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- Docker | 容器数据卷详解
什么是容器数据卷 从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了. 如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化 My ...
- Docker 容器数据卷(Data Volume)与数据管理
卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...
- docker 12 docker容器数据卷
数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ...
- Docker之数据卷Volume(七)
一.简介 Docker数据卷(volume)机制.volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利. 1)v ...
- Docker容器数据卷
⒈Docker容器中数据如何持久化? ①通过commit命令使容器反向为镜像 ②以容器数据卷的方式将数据抽离 ⒉容器数据卷的作用? ①容器数据的持久化 ②容器间继承.共享数据 ⒊能干嘛? 卷就是目录或 ...
- Docker容器数据卷介绍和命令
是什么 一句话:有点类似我们Redis里面的rdb和aof文件 先来看看Docker的理念: * 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 * ...
- Docker容器数据卷(七)
Docker致力于: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker co ...
- 5、docker容器数据卷: -v添加共享传递容器数据卷
1.是什么 1.docker理念 先来看看Docker的理念:* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的* 容器之间希望有可能共享数据 2.保 ...
随机推荐
- msyql join语句执行原理
首先,我建了一个表t2,里面有1000条数据,有id,a,b三个字段,a字段加了索引 然后我又建立一个t1表,里面有100条数据,和t2表的前一百条数据一致,也是只有id,a,b三个字段,a字段加了索 ...
- 无法启动Sql Server服务
本文首发地址为hilsion的博客 今天遇到一个无法启动SQL Server服务的问题,具体报错如下: 根据错误提示,去到WINDOWS的事件查看器.在WIN10上,右击右下角的菜单图标: 然后依次点 ...
- java_第一年_JavaWeb(8)
前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...
- 61-python基础-python3-格式化浮点数方法-%e、%f、%g
1-%e是用科学记数法计数: %f是按指定精确格式化浮点数(默认保留6位): %g是根据数值的大小采用e或%f. 2-%f可以按长度和精度格式化浮点数,如%a.bf,a表示浮点数的长度,b表示浮点数小 ...
- CodeChef Mahesh and his lost array
Mahesh and his lost array Problem code: ANUMLA Submit All Submissions All submissions for this ...
- SQL 查询中not in 与 not exists 的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- 机器学习-线性回归(基于R语言)
基本概念 利用线性的方法,模拟因变量与一个或多个自变量之间的关系.自变量是模型输入值,因变量是模型基于自变量的输出值. 因变量是自变量线性叠加和的结果. 线性回归模型背后的逻辑——最小二乘法计算线性系 ...
- Zen Coding – 超快地写网页代码(注:已更名为Emmet)
这篇博客能帮助快速上手这款插件,极大地提高开发效率废话不多说直接上例子 zen codeing的缩写规则 E 元素名 (div, p); 实例:(输入完<按快捷键ctrl+E>就会显示) ...
- java 静态内存图、静态代码块
package java08; /* 静态代码块格式: public class 类名称{ static{ //静态代码块 } } 特点:当第一次执行本类时,静态代码块执行唯一的一次 * */ pub ...
- Linux --忘记root密码/su: Authentication failure
如果忘记了root用户的密码,或者su root的时候,提示:su: Authentication failure 那么,可以通过以下的方式来重新设置密码,而后,再尝试,那么就可以顺利su root了 ...