了解一下docker容器数据卷
容器卷就是目录或者文件,存在于一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。容器之间可以有一个数据共享的技术,docker容器中产生的数据,同步到本地。这就是卷技术,目录的挂载,将我们的容器内的目录,挂载到Linux宿主机上!
一句话:类似redis的edb和aof持久化,将docker容器内的数据保存进宿主机的磁盘中,运行一个带有容器卷存储功能的容器实例。
举例:如果数据都存在容器中,那么把容器删除,数据就会丢失。那么数据可以持久化;Mysql容器删了,数据也都丢了,Mysql数据可以存储在本地!
容器数据卷是为了实现容器的持久化和同步操作!容器间也是可以实现数据共享的(多个容器可以共享一个地方的数据)
特点总结:
- 数据卷可以在容器之间共享或者重用数据
- 卷中的更改可以直接实时生效,爽。docker修改,主机同步获得;主机修改,docker同步获得;docker容器stop,主机修改,docker容器重启,数据依然同步。
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
测试
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的数据库主从,好比宿主机相当于主库,两个容器相当于两个从库。