什么是容器数据卷
docker 的理念回顾
将应用和环境打包成一个镜像!
数据如果数据都在容器中,容器删除之后数据就会消失 ,我们怎么来保证数据持久化呢?
比如Mysql,容器删掉的话,GG删库跑路,我们要把MySQL的数据存在本地
容器之间有个共享的技术!Docker容器产生的数据,同步到本地
这就是技术卷,目录的挂载,将我们容器内的目录,挂载到Linux上面!
总结:容器的持久化和同步操作!容器间也是可以同步共享数据的
使用数据卷
- 方式一: 使用 -v命令就像挂载
1 2 3 4 5 6 7 8 9
| docker run -it -v 主机目录:容器中目录 镜像名 /bin/bash
root@again:~ root@2651b9e919b6:/usr/local/tomcat BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
|

容器中新建完文件,主机中查看可以看到,说明同步成功

当我们把容器停止后,我们修改主机的文件,是否可以在容器再次启动同步到容器中呢?

答案是会的
实战,安装配置MySQL
1 2 3 4 5 6 7 8 9 10
| docker pull mysql:5.7
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=543210 --name mysql01 mysql:5.7
|
测试连接成功

具名挂载和匿名挂载
匿名挂载
1 2 3 4 5 6 7 8 9 10 11
| -v 容器内路径 docker run -d -p --name nginx01 -v /etc/nginx nginx
root@again:~ DRIVER VOLUME NAME local 53912b2c23049d224bbe98482918fb3984a402200cf7c93dc0dd1eeba92b2ba8
local 53912b2c23049d224bbe98482918fb3984a402200cf7c93dc0dd1eeba92b2ba8
|
具名挂载
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
| docker run -d --name nginx02 -v juming_guazai:/etc/nginx nginx
root@again:~ DRIVER VOLUME NAME local 53912b2c23049d224bbe98482918fb3984a402200cf7c93dc0dd1eeba92b2ba8 local juming_guazai
root@again:~ [ { "CreatedAt": "2020-10-27T09:58:52+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/juming_guazai/_data", "Name": "juming_guazai", "Options": null, "Scope": "local" } ]
|
所有的docker容器内的卷,没有指定目录的情况下 都是在 /var/lib/docker/volumes/xxx/_data 下的
我们通过一个具名,可以方便的帮助我们找到一个卷,这是大多数情况在用的,不推荐使用具名
如果区别这是匿名挂载还是具名挂载呢 或者是 指定路径挂载呢?
- -v 容器内路径 匿名挂载
- -v 具名:容器内路径 具名挂载
- -v 主机路径:容器内路径 指定路径挂载
拓展
有时候会遇到 后面加个 ro 或者 rw
ro ReadOnly 只读权限
rw ReadWrite 读写权限
一旦设置了权限,容器对我们挂载出来的内容就有限制了
1 2 3
|
docker run -d --name nginx03 -v test:/etc/nginx:**ro** nginx
|
1 2
| docker run -d --name nginx03 -v test:/etc/nginx:**rw** nginx
|