什么是容器数据卷
如果数据都在容器中,容器删除,数据就会丢失。
MySQL容器删除,数据丢失。需求:MySQL数据可以存储在本地
容器之间可以有一个共享的技术,docker容器中产生的数据,同步到本地,这就是卷技术。
总结一句话:容器的持久化和同步操作,容器间也是可以数据共享的。
数据卷使用
#方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
#测试:
[root@bogon wyh]# docker run -it -v /home/ceshi:/home centos /bin/bash
#启动起来通过docker inspect 容器id
[root@bogon wyh]# docker inspect 3d2153a125e3
实战:安装MySQL
#启动MySQL
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名挂载和匿名挂载
#匿名挂载
[root@bogon wyh]# docker run -d -P --name nginx01 -v /etc/nginx nginx
[root@bogon wyh]# docker volume ls
DRIVER VOLUME NAME
local e7570a4352bf0d30a72f3d2559051786211bfcb81a6267eb63aa696213754654
这就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径
#具名挂载:通过 -v 卷名:容器内路径
[root@bogon wyh]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
7f5b78d80d23dbe23b97ddf99afbac82d53de23355b350382658658074ddea0e
[root@bogon wyh]# docker volume ls
DRIVER VOLUME NAME
local e7570a4352bf0d30a72f3d2559051786211bfcb81a6267eb63aa696213754654
local juming-nginx
查看一下卷路径
[root@bogon wyh]# docker volume inspect juming-nginx
[
{
"CreatedAt": "2021-01-04T17:48:04-08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/卷名/_data
拓展
#通过-v 容器内路径,ro rw 改变读写权限
ro readonly #只读
rw readwrite #可读可写
#一旦设置容器权限,容器对我们挂载出来的内容就有限定了。
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx
#ro说明这个路径只能通过宿主机来操作,容器内都是无法操作