数据卷是为了实现数据的持久化,完全独立于容器的生存周期,因此Docker不会在删除容器时删除其挂载的数据卷。
通过下述方式运行一个容器,会自动将docker容器内的数据保存进宿主机的磁盘中
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
例如:通过上述方式运行一个centos容器,在centos容器内创建的文件会自动备份到宿主机的目录中,同样在宿主机的目录中创建的文件也会自动保存到centos容器内的相关目录中。如果将centos容器stop,然后在主机内创建一个文件,之后再重启该centos容器,则容器内依然有本机创建的文件。
1. docker修改,主机同步获得
2. 主机修改,docker同步获得3. docker容器stop,主机修改,docker容器重启,数据依然同步。
一. 实现容器卷与主机互通
1. 运行centos容器
将本机的/tmp/host_data目录与centos容器的/tmp/docker_data目录互通
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data centos
2. 在centos容器的/tmp/docker_data目录下创建一个a.txt文件
3. 查看本机的/tmp/host_data目录,可以看到本机的/tmp/host_data目录下也有一个a.txt文件
4. 在本机的/tmp/host_data目录下创建一个b.txt文件
5. 查看centos容器的/tmp/docker_data目录,可以该目录下也有一个b.txt文件
另外,不管是在centos容器内还是在本机修改了a.txt或b.txt,两个目录的a.txt或b.txt都会发生相同的变化。
如果将centos容器stop停止,并在主机上创建一个c.txt,然后重启该centos容器(使用start 容器id的方式开启该容器,而不是新建容器),则该容器内依然有c.txt。
查看容器卷绑定情况
docker inspect 容器id
二. 读写权限
1. 写权限(容器内可读可写)
可以不加:rw,默认是写权限
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
2. 只读权限(容器内只能读不能写)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
此时如果宿主机写入内容,可以同步给容器内,容器可以读取到;但是容器不可以写
三. 容器卷之间的继承
docker run -it --privileged=true --volumes-from 父类容器ID或父类容器名 镜像名
例如:创建一个名为u1的centos容器,再创建一个名为u2的centos容器来继承u1,在u2中创建一个文件,则u1和本机都会有该文件。如果将u1停止,则在u2内创建一个新的文件,则u1和本机依然有该文件。
1.创建u1
2. 创建u2继承u1
3. u1中有u2创建的文件
4. 本机有u2创建的文件