了解一下docker容器数据卷

容器卷就是目录或者文件,存在于一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。容器之间可以有一个数据共享的技术,docker容器中产生的数据,同步到本地。这就是卷技术,目录的挂载,将我们的容器内的目录,挂载到Linux宿主机上!

一句话:类似redis的edb和aof持久化,将docker容器内的数据保存进宿主机的磁盘中,运行一个带有容器卷存储功能的容器实例。

举例:如果数据都存在容器中,那么把容器删除,数据就会丢失。那么数据可以持久化;Mysql容器删了,数据也都丢了,Mysql数据可以存储在本地!

容器数据卷是为了实现容器的持久化和同步操作!容器间也是可以实现数据共享的(多个容器可以共享一个地方的数据)

特点总结:

  1. 数据卷可以在容器之间共享或者重用数据
  2. 卷中的更改可以直接实时生效,爽。docker修改,主机同步获得;主机修改,docker同步获得;docker容器stop,主机修改,docker容器重启,数据依然同步。
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

测试

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名    //命令
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=mytest ubuntu

docker交互式运行完成之后,会在docker容器和宿主机目录下分别自动创建映射的目录,两个目录下的数据可以同步共享.

docker inspect 容器ID //用来查看容器的信息
docker inspect c19f6424169b

这里目前只有一个对应目录挂载,实际可以挂载多个,比如日志、数据等目录。

容器与宿主机文件权限设置 

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名    //命令 ,默认是rw,可读可写

有时候让容器里是只读的,容器内部被限制,只能读不能写。

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名    //命令 ,是ro,也就是read only首字母,只可读

容器卷的继承和共享 

docker run -it --privileged=true --volumes-from 父类 --name mytest2 ubuntu

比如运行了一个测试父级容器

docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=mytest1 ubuntu   //mytest1

子类继承父级

docker run -it --privileged=true --volumes-from mytest1 --name mytest2 ubuntu

假如父级容器意外终止,依然可以容器与宿主机传递,也类似于mysql的数据库主从,好比宿主机相当于主库,两个容器相当于两个从库。

 

posted @ 2022-06-09 17:13  温柔的风  阅读(206)  评论(0编辑  收藏  举报