问题:每次改动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

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21739648/1629423729118-db2dd129-1baa-4ad8-9697-8c295b121095.png#align=left&display=inline&height=233&margin=%5Bobject%20Object%5D&name=image.png&originHeight=233&originWidth=878&size=20692&status=done&style=none&width=878)<br />再测试数据同步:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21739648/1629423610972-becdda6b-5478-492d-a1a9-c6c7936ce50d.png#align=left&display=inline&height=848&margin=%5Bobject%20Object%5D&name=image.png&originHeight=848&originWidth=1719&size=150272&status=done&style=none&width=1719)<br />好处:将容器的配置文件放到主机目录下,可以直接在容器外进行更改,另外防止数据误删!!!
  2. <a name="XyBLo"></a>
  3. ### 实战MySQL数据保护
  4. ```shell
  5. # 1.拉取镜像pull mysql5.7
  6. # 2.启动mysql容器。一定要挂载!!!
  7. 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
  8. # 3.Navicat连接测试

image.png
image.png
测试容器删除:
image.png

具名和匿名挂载

  1. # 匿名挂载
  2. docker run -d -P --name nginx01 -v 容器内路径 nginx
  3. [root@izbp1g2kp3kgefvmrhy0moz home]# docker run -d -P --name nginx01 -v /etc/nginx nginx
  4. b7344f1c9e2de753954c95bbda9540328f89f0a22bd1b9a3cb7883bb56283bed
  5. # 查看所有的 volume 的情况
  6. [root@izbp1g2kp3kgefvmrhy0moz data]# docker volume ls
  7. DRIVER VOLUME NAME
  8. local b95d4c798fa73eb9b21412ebb393378037edd3c748fb0340e40de188d823b195
  9. # 具名挂载
  10. docker run -d -P --name nginx01 -v 具名:容器内路径 nginx
  11. [root@izbp1g2kp3kgefvmrhy0moz home]# docker run -d -P --name nginx01 -v juming:/etc/nginx nginx
  12. c013a877bd34698d2e6a133f70038b4a1a42d6fc35e233e06f672751c1c92c78
  13. # 查看volume详细情况
  14. [root@izbp1g2kp3kgefvmrhy0moz data]# docker volume inspect juming
  15. [
  16. {
  17. "CreatedAt": "2021-08-20T10:16:45+08:00",
  18. "Driver": "local",
  19. "Labels": null,
  20. "Mountpoint": "/var/lib/docker/volumes/juming/_data",
  21. "Name": "juming",
  22. "Options": null,
  23. "Scope": "local"
  24. }
  25. ]
  26. #文件中查看

image.png

拓展

  1. # 通过 -v 容器内路径:ro (rw) 来改变读写权限。。。默认rw
  2. ro readonly 只读
  3. rw readwrite 读写
  4. # 限定权限挂载
  5. docker run -d -P --name nginx01 -v juming:/etc/nginx:ro nginx
  6. # ro 导致只能通过宿主机来操作容器,而无法通过容器来改变宿主机文件

数据卷容器

多个容器内的mysql数据同步!数据共享。

  1. # 命令 --volumes-from
  2. # 启动两个mysql容器测试
  3. [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
  4. [root@izbp1g2kp3kgefvmrhy0moz _data]# docker run -d -p 8081:3306 -e MYSQL_ROOT_PASSWORD=2399 --name mysql02 --volumes-from mysql01 mysql:5.7
  5. # Navicat测试

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