1.挂载主机目录方式验证
(1)创建一个目录,并在目录里面创建文件,文件内写入内容
[root@centos1 docker]# mkdir volume[root@centos1 docker]# cd volume[root@centos1 volume]# [root@centos1 volume]# echo "this is test file..." > test.txt[root@centos1 volume]# cat test.txt this is test file...
(2)容器创建数据卷【挂载目录方式】
在使用docker run的命令时,使用 -v 标记可以在容器内创建一个数据卷,并且可以指定挂在一个本地已有的目录到容器中作为数据卷:
[root@centos1 volume]# docker run -itd --name volume-test -v ${PWD}:/root/volume centos bash5275bf621d87f29b805f2778808a8aad716228da373b26c7bf4f6dfd6fdeb2dd
![c6172a8880a5c4db786ff0f283e0db41.png](https://img-blog.csdnimg.cn/img_convert/c6172a8880a5c4db786ff0f283e0db41.png)
默认挂载的数据卷的权限是rw(可读写),如果要求ro(只读),则需要加上对应的ro参数,命令可改为:
docker run -itd --name volume-test -v ${PWD}:/root/volume:ro centos bash
(3)查看容器内的数据卷
进入容器找到root目录可查看到已挂载的数据卷:
[root@centos1 volume]# docker exec -it volume-test bash[root@5275bf621d87 /]# cd /root/[root@5275bf621d87 ~]# ls anaconda-ks.cfg volume[root@5275bf621d87 ~]# [root@5275bf621d87 ~]# cd volume/[root@5275bf621d87 volume]# ls -rlttotal 4-rw-r--r--. 1 root root 21 May 13 01:19 test.txt[root@5275bf621d87 volume]# [root@5275bf621d87 volume]# cat test.txt this is test file...
可以看出数据卷目录与容器内目录的内容是一样的。不管是在容器内部修改数据卷还是在外部修改数据卷,相对应的数据卷都会发生改变。
(4)在容器中修改
[root@5275bf621d87 volume]# echo "second line..." >> test.txt [root@5275bf621d87 volume]# cat test.txt this is test file...second line...[root@5275bf621d87 volume]# exitexit[root@centos1 volume]# cat test.txt this is test file...second line...
可以看出,容器中修改了数据卷下的文件后,容器外部看到的内容也同时更改了。
2. 数据卷容器
数据卷容器用于用户需要在容器间共享一些持续更新的数据,数据卷容器专门提供数据卷供其它容器挂载使用。
(1)创建数据卷容器
[root@centos1 volume]# docker run -itd --name db1 -v /dbdata centos bash8942d28e569f215280f394599d7c18a6f7d948f616eebbfe38eefa57a4ea900e
(2)共享数据卷容器
创建容器db2与db1共享dbdata的数据:
[root@centos1 volume]# docker run -itd --name db2 --volumes-from db1 centos bash34167d0273e3cc036059654d07ebcb42262d69000a297b56e8d1271b1b954274
(3)验证数据卷共享
在容器db1和容器db2任意一个容器修改dbdata的内容,在两个容器内均生效:
容器db1中:
[root@centos1 volume]# docker exec -it db1 bash[root@8942d28e569f /]# cd /dbdata/[root@8942d28e569f dbdata]# ls[root@8942d28e569f dbdata]# echo "test first file." > file1.txt
容器db2中:
[root@centos1 ~]# docker exec -it db2 bash[root@34167d0273e3 /]# cd /dbdata/[root@34167d0273e3 dbdata]# lsfile1.txt[root@34167d0273e3 dbdata]# cat file1.txt test first file.[root@34167d0273e3 dbdata]# echo "test append." >> file1.txt [root@34167d0273e3 dbdata]#
容器db1中:
[root@8942d28e569f dbdata]# cat file1.txt test first file.test append.
如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删除最后一个还挂载它的容器时显示使用docker rm -v 命令指定同时删除关联的数据卷。