目录
一、容器数据卷是什么
二、容器数据卷能干吗
三、宿主vs容器之间映射添加容器卷
四、读写规则映射添加说明
五、卷的继承和共享
一、容器数据卷是什么
Docker将运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷。
卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但卷不属于联合文件系统(Union FileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享数据的特性。
容器数据卷类似于外置的活动硬盘一样:
二、容器数据卷能干吗
卷的设计目的:就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
1、数据卷可在容器之间共享或重用数据。
2、卷中的更改可以直接实时生效。
3、数据卷中的更改不会包含在镜像的更新中。
4、数据卷的生命周期一直持续到没有容器使用它为止。
三、宿主vs容器之间映射添加容器卷
1、命令
# 公式
docker run -it --privileged=true -v /宿主机目录:/容器内目录 ubuntu /bin/bash
# 本文中:如果宿主机下没有host_data目录,会自动创建
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu /bin/bash
# 查看数据卷各种信息,包括可看到容器卷挂挂载
docker inspect 容器ID
2、数据共享
docker修改,主机同步获得
主机修改,docker同步获得
3、 docker容器stop,主机修改,docker容器重启看数据一样同步
四、读写规则映射添加说明
# 容器实例内部被限制只能读不能写,ro=read only
docker run -it --privileged=true -v /宿主机目录:/容器内目录:ro --name=u1 ubuntu /bin/bash
# 此时如果宿主机写入内容,可以同步给容器内,容器可以读取到
# 容器自己只能读取不能写
五、卷的继承和共享
# 运行一个容器,命名u1
docker run -it --privileged=true -v /宿主机目录:/容器内目录 --name=u1 ubuntu /bin/bash
# 运行另一个,继承u1,命名u2
docker run -it --privileged=true --volume-from u1 --name=u2 ubuntu /bin/bash
当u1退出,u2继承u1,u2容器卷不影响