数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多专用的特性:
数据卷可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更修不会影响镜像
数据卷会一直存在知道没有容器使用
数据卷的使用类似于Linux下对目录或者文件进行mout操作。数据的持久化应该在本地服务器而不是在容器内。数据卷就可以实现目录的挂载,容器用于计算,数据回归本地存储!
使用命令进行挂载 -v
docker run -it -v #主机目录地址:容器目录地址
#测试
docker run -it -v /home/test:/home centos /bin/bash
# 启动之后可以通过docker inspect 容器id查看容器的详细信息
测试文件的同步
#获取镜像
[root@VM-4-17-centos /]# docker pull mysql:5.7
# 运行容器并做数据挂载 安装启动mysql需要配置密码
-d 后台启动
-p 端口映射
-v 数据卷挂载
-e 环境配置
-- name 容器名称
[root@VM-4-17-centos home]# docker run -d -p 3336: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
#启动成功之后使用mysql连接工具进行连接
#在本地测试新建一个test数据库,查看映射的路径是否正确
#讲mysql容器彻底删除 再次进入mysql/data目录,test文件夹还是存在,即挂载到本地的数据卷依旧没有丢失
[root@VM-4-17-centos /]# docker rm -f mysql01
所有的docker容器内的卷,没有指定目录的情况下都是在
目录。
#如何区分是具名挂载还是匿名挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
#docker挂载的数据卷默认权限是读写(rw),用户也可以通过(ro)指定为只读,说明只能通过宿主机进行数据修改
[root@VM-4-17-centos /]# docker run -d -p --name nginx01 -v /home/nginx:/etc/nginx:ro nginx
#加了ro之后容器内挂载的数据卷的数据就无法修改了