
卷就是目录或文件,存在于一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFile System 提供一些用于持续存储或共享数据的特征:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
容器卷是什么
容器卷特点:
1.数据卷可以在容器之间共享或重用数据
2.卷中的更改可以直接实时生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止
docker run -itd --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
容器卷的案例实验
1.宿主vs容器之间映射添加容器卷 实现了数据同步
(1)创建完容器卷后,在宿主机和容器创建目录和文件 是实时同步 共享的 。
#docker run -itd --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名docker run -itd --privileged=true -v /tmp/host_data:/tmp/docker_data --name=tt ubuntu:latest
(2)查看数据卷是否挂载成功
docker inspect 9d3784702243 # docker inspect 容器id"Mounts": [{"Type": "bind","Source": "/tmp/host_data","Destination": "/tmp/docker_data","Mode": "","RW": true,"Propagation": "rprivate"
(3)即使当容器挂掉之后,在宿主机上创建的文件,当容器恢复在up状态下也是能同步到的。
相反,容器里创建什么数据,或者修改什么数据,宿主机的目录也会同步,相当于也做了个备份
2.添加说明
(1)读写(默认)rw:可读可写
docker run -itd --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
(2)只读不能写,容器实例内部被限制,只能读取把那写 后面加上ro就可以了
ro=read only
此时如果宿主机写入内容,可以同步给容器内,容器可以读取到
docker run -itd --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名docker run -itd --privileged=true -v /tmp/host_data/:/tmp/docker_data:ro --name u2 ubuntu:latest#root@37fdc72dedb2:/tmp/docker_data# touch tttt.txt #容器内是无法创建的touch: cannot touch 'tttt.txt': Read-only file system
3.卷的继承和共享
volumes=卷 Docker数据持久化的一种机制
容器1完成宿主机的映射
docker run -itd --privileged=true -v /mydocker/u:/tmp/u: --name u1 ubuntu:latest
[root@iZhp32g7rqylwwhh4ohd5iZ ]# docker exec -it 27 /bin/bash
root@27cee89d0d40:/# cd /tmp/u
root@27cee89d0d40:/tmp/u# ls
root@27cee89d0d40:/tmp/u# touch u1data.txt
root@27cee89d0d40:/tmp/u# ls
u1data.txt #可以看到目前已经有了u1data.txt文件
容器2继承容器1的卷规则
公式#docker run -itd --privileged=true --volumes-from 父类 --name u2 ubuntu
docker run -itd --privileged=true --volumes-from u1 --name u2 ubuntu:latest
[root@iZhp32g7rqylwwhh4ohd5iZ u]# docker exec -it ef /bin/bash
root@ef90eb4aae12:/# cd /tmp/u
root@ef90eb4aae12:/tmp/u# ls
u1data.txt #容器2里面也是有容器1的文件的 已经继承了容器1
完成容器1 容器2 宿主机三个实时同步共享数据的一个环境
(3)总结:当容器1挂掉后,容器2和宿主机 不受任何影响的,在启动容器1时数据也会实时同步的。
