Docker运维教程(4)容器数据卷与数据持久化

TangLu 系统运维 2024-04-02 14488 0

一、Docker数据卷(Docker volume)的作用

Docker容器在进行重启或者关闭时对容器内的数据没什么影响的,但是一旦容器被删除,那其中数据则会全部删掉。这对于需要将数据持久化的场景是不合适的,比如数据库、WEB页面等。为了实现数据的持久化,可以使用docker volume数据卷实现持久化,通过数据卷可以让宿主机和容器间共享存储


二、Docker数据卷(Docker volume)的使用方法

1、配置数据卷

在启动容器时使用-v选项就可以指定宿主机与容器之间共享的目录,如果指定的宿主机目录并不存在,docker会进行自动创建。

docker run -it --name centos7_d1 -v /docker_data:/data  centos:latest    #将宿主机/docker_data目录挂载到容器/data中


2、只读数据卷

在进行挂载的时候可以声明只读挂载,这样容器就无法修改宿主机中的数据

docker run -it --name centos7_d2 -v /docker_data:/data:ro centos:latest   #将宿主机/docker_data目录只读模式挂载到容器/data中


3、查询数据卷

通过docker inspect的Mounts信息可以看到数据卷的信息。一个容器可以有多个存储卷,一个存储卷也可以挂载给多个容器

#查看当前所有的volume
docker volume ls  
docker volume inspect my_volume1  #查看my_volume1的信息


4、挂载数据卷的注意点

· 进行挂载时需要确保被挂载点里面没有数据,否则执行挂载操作后看到的都是共享出来的数据。

· 在进行镜像打包时要注意宿主机所挂载出来的目录并不会被一起打包

· 如果创建文件时提示没有权限,记得关闭SELINUX

· 在容器数据目录里创建的文件都会在宿主机的目录里出现,同理在宿主机目录里创建的文件在容器中也可以看到,即使删除了容器,挂载目录中的数据也不会消失

· 如果在挂载的时候没有写宿主机的路径,则会由Docker在特定的目录下自动创建一个目录并挂载到容器中,通过docker inspect的Mounts信息可以查到

docker_volume.jpg


三、使用数据卷实现跨容器共享(数据卷容器)

要实现容器和容器之间的数据共享,可以使用数据卷容器来实现

#使用docker volume命令提前创建好数据卷,用于给后面的容器使用
docker volume create

当后续有多个容器需要挂载之前的数据卷时使用--volumes-from参数即可

docker run -it -v /dbdata --name dbdata centos:latest
docker run -it -v /dbdata --volumes-from dbdata --name db1 centos:latest  #从其他容器中挂载


评论