一、Docker数据卷的作用
Docker容器在进行重启或者关闭时对容器内的数据没什么影响的,但是一旦容器被删除,那其中数据则会全部删掉。这对于需要将数据持久化的场景是不合适的,比如数据库、WEB页面等。而使用volume数据卷就可以将数据通过存储卷(data volume)存到本地硬盘或者使用其他的网络存储进行挂载,实现容器数据的持久化。
二、Docker volume使用方法
1、在启动容器时使用-v选项来指定宿主机存储卷的路径与容器挂载点的路径,如果宿主机不存在该目录也会自动创建,该选项还支持读写权限的设置,如果在挂载的时候没有写宿主机的路径,则会由Docker自定创建一个目录进行挂载,通过docker inspect的Mounts信息可以看到具体路径。一个容器可以有多个存储卷,一个存储卷也可以挂载给多个容器。
#方法1:使用-v选项创建volume
docker run -it --name centos7_d1 -v /docker_data:/data centos:latest #将宿主机/docker_data目录挂载到容器/data中
docker run -it --name centos7_d2 -v /docker_data:/data centos:latest:ro #挂载后设置只读权限
#方法2:使用docker volume命令创建
docker volume create
2、进入容器查看根目录可以看到已经多了一个数据目录
3、查询volume在宿主机中的真实路径
docker volume ls #查看当前所有的volume
docker volume inspect my_volume1 #查看my_volume1的信息
4、在容器数据目录里创建的文件都会在宿主机的目录里出现,同理在宿主机目录里创建的文件,在容器中也可以看到。即使关闭了容器数据也不会消失。如果创建文件时提示没有权限,记得关闭SELINUX
三、使用数据卷实现跨容器共享(数据卷容器)
当A容器运行MySQL并生成了数据后,让B容器也运行同样的服务,并且使用A容器的volume实现数据共享
docker run -it -v /dbdata --name dbdata centos:latest
docker run -it -v /dbdata --volumes-from dbdata --name db1 centos:latest #从其他容器中挂载