什么是数据卷
docker理念回顾
将应用和环境打包成一个镜像!
如果数据都在容器中,那么我们把容器删除,数据就会丢失!需求数据可以持久化
所以就应运而生了一个数据共享技术,Docker数据卷,docker中的数据同步到本地
将我们容器内的目录,挂在到我们自己的Linux上
总结一句话:容器的持久化和同步操作,容器间也是可以数据共享的!
使用数据卷
方式一
直接使用命令去挂载
docker run -it -v(主机目录,容器内目录) -p(主机端口,容器内端口)
docker run -it -v /home/test:/home ubuntu:latest /bin/bash
# 通过 docker inspect containerID
已经挂载在上面了
source:我们主机上面的地址
我们无论在主机上修改信息还是在docker中修改文件都是会同步的,无论docker容器是否停止
好处:我们以后修改只需要在本地修改,容器内会自动同步
实战:安装MySQL
MySQL的数据持久化的问题
# 先拉取mysql镜像
$ docker pull mysql
# 启动我们的mysql
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
$ docker run -d -p 3306:3306 -v /home/lzuser/mysql/conf:/etc/mysql/conf.d -v /home/lzuser/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:latest
具名和匿名挂载
# 匿名挂载
-v 容器内路径
$ docker run -d --name nginx01 -v /etc/nginx nginx
# 查看所有的volume
$ docker volume ls
# 具名挂载
$ docker run -d --name nginx02 -v name:/etc/nginx nginx
在docker容器内的卷,在没有指定目录的情况下都是在/var/lib/docker/volumes/××××/_data
拓展:
# 通过 -v 容器内路径: ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写
# 一旦设定了权限
$ docker run -d --name nginx01 -v /etc/nginx:ro nginx
$ docker run -d --name nginx02 -v /etc/nginx:rw nginx
ro 表示我们在容器内无法写,只能读,这个文件夹只有在docker容器外才能被写