[Docker数据卷 | 青训营笔记]

40 阅读1分钟

什么是数据卷

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容器外才能被写