问题:每次改动Nginx配置文件 ,都得进入容器内部?这样十分麻烦,
答案:在容器外提供一个映射路径,可以修改文件,容器内部直接修改!!
实践
我们可以将容器内的数据与容器外docker宿主机的文件相互映射。docker与本地数据同步,这样既解决了避免进入容器内部修文件改的问题,也避免了不小心将容器删除导致数据丢失。
使用数据卷
- 方式一:直接使用命令进行挂载 -v ```shell docker run -it -v 主机目录:容器目录
测试
[root@izbp1g2kp3kgefvmrhy0moz home]# docker run -it —name nginx02 -p 8081:80 -v /home/nginx02:/home nginx
查看容器详细信息
[root@izbp1g2kp3kgefvmrhy0moz nginx02]# docker inspect nginx05
<br />再测试数据同步:<br /><br />好处:将容器的配置文件放到主机目录下,可以直接在容器外进行更改,另外防止数据误删!!!<a name="XyBLo"></a>### 实战MySQL数据保护```shell# 1.拉取镜像pull mysql5.7# 2.启动mysql容器。一定要挂载!!!docker run -d -p 8082:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2399 --name mysql01 mysql:5.7# 3.Navicat连接测试
具名和匿名挂载
# 匿名挂载docker run -d -P --name nginx01 -v 容器内路径 nginx[root@izbp1g2kp3kgefvmrhy0moz home]# docker run -d -P --name nginx01 -v /etc/nginx nginxb7344f1c9e2de753954c95bbda9540328f89f0a22bd1b9a3cb7883bb56283bed# 查看所有的 volume 的情况[root@izbp1g2kp3kgefvmrhy0moz data]# docker volume lsDRIVER VOLUME NAMElocal b95d4c798fa73eb9b21412ebb393378037edd3c748fb0340e40de188d823b195# 具名挂载docker run -d -P --name nginx01 -v 具名:容器内路径 nginx[root@izbp1g2kp3kgefvmrhy0moz home]# docker run -d -P --name nginx01 -v juming:/etc/nginx nginxc013a877bd34698d2e6a133f70038b4a1a42d6fc35e233e06f672751c1c92c78# 查看volume详细情况[root@izbp1g2kp3kgefvmrhy0moz data]# docker volume inspect juming[{"CreatedAt": "2021-08-20T10:16:45+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming/_data","Name": "juming","Options": null,"Scope": "local"}]#文件中查看

拓展
# 通过 -v 容器内路径:ro (rw) 来改变读写权限。。。默认rwro readonly 只读rw readwrite 读写# 限定权限挂载docker run -d -P --name nginx01 -v juming:/etc/nginx:ro nginx# ro 导致只能通过宿主机来操作容器,而无法通过容器来改变宿主机文件
数据卷容器
多个容器内的mysql数据同步!数据共享。
# 命令 --volumes-from# 启动两个mysql容器测试[root@izbp1g2kp3kgefvmrhy0moz _data]# docker run -d -p 8080:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=2399 --name mysql01 mysql:5.7[root@izbp1g2kp3kgefvmrhy0moz _data]# docker run -d -p 8081:3306 -e MYSQL_ROOT_PASSWORD=2399 --name mysql02 --volumes-from mysql01 mysql:5.7# Navicat测试

结论:
—volumes-from 可以实现多个容器之间的互相映射
重要文件例如:MySQL数据。可以通过挂载linux系统文件内,再将多个容器之间的数据相互映射实现数据共享


