数据都在容器中,那么我们容器删除,数据就会丢失,所以容器与宿主机之间需要有一个数据共享技术!Docker容器中产生的数据,同步到本地!通过docker的卷挂载,将我们容器内的目录挂载到linux目录上面,这就是券挂载技术。
docker run -v 宿主机目录:容器目录
docker run -it -v /home/test:/home centos /bin/bash
通过这样的方式宿主机的/home/test就与容器/home目录建立了联系,这样不管当宿主机还是容器做了修改,互相都可见。并且就算容器停止阶段,宿主机对改挂载目录做了修改,容器重新启动后依然能看到修改后的内容,这样的话就占用了2倍的存储空间
Mysql数据同步挂载案例
1、docker pull mysql:5.7
2、docker run -d -p 3344:3306
-v /home/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
3、然后通过Navicat连接上宿主机3344端口,并且创建一个test数据库
容器:
宿主机:
可以发现宿主机和容器都创建了test库
挂载又可细分为三种
- 匿名挂载
- 具名挂载
- 指定路径挂载
匿名挂载:顾名思义挂载的时候没有指定宿主机的挂载路径
docker run -d -P --name nginx01 -v /etc/nginx nginx # -P 随机指定端口
通过这种方式挂载会在宿主机自己生成一个路径,那如何查看呢?
# 获取所有volume
docker volume ls
#查看某个volume的挂载情况
docker volume inspect 卷名
具名挂载:指定具体挂载的券名
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
匿名和具名在没有指定目录的情况下都是在/var/lib/docker/volumes/xxxxx/_data目录下
指定路径挂载: 指定具体的宿主机挂载路径
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用的是具名挂载
拓展
# 有时会在容器后指定 ro或者rw
#ro(readOnly,表示容器内只能读,只能通过宿主机操作)
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
#rw(readWrite,可读可写)
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
参考链接:
【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili



