容器卷
容器内的数据和宿主机映射,即数据的持久化
--privileged=true
通过命令创建容器,将容器/tmp/docker_data数据挂载到宿主机/tmp/host_data下(默认情况下,宿主机和容器内部的挂载卷目录都可进行读写操作,并会双向同步)
容器创建后,进入容器下的/tmp/docker_data下,通过touch dockerin.txt 创建个dockerin.txt,再通过Ctrl+p+q命令退出容器内部,进入宿主机的/tmp/host_data目录下,通过ls命令查看,在宿主机下同样有一个dockerin.txt文件
进入宿主机/tmp/host_data目录下发现存在dockerin.txt,那同样在宿主机创建一个hostin.txt,看是否也同样存在于容器内的/tmp/docker_data下呢?通过touch hostin.txt创建文件,再通过docker exec -it 容器id /bin/bash 以交互式方式进入容器内部,查看容器内/tmp/docker_data下,同样存在hostin.txt
在验证挂载成功退出后,后面如何查看容器和宿主机挂载情况,可以通过docker inspect 容器id查看挂载情况。 source为源头,即宿主机,destination为容器目录
在我们和容器和宿主机挂载成功的情况下,停掉容器,在宿主机对应挂载卷创建一个a.txt,然后重新启动容器,数据会同步到容器相应目录吗?答案是yes
设置容器只读权限
通过以下命令启动容器并设置为容器只读权限
docker run -it --privileged=true -v /mydocker/u:/tmp/u:ro --name u2 ubuntu
我们创建容器后,进入到挂载卷目录,通过touch a.txt创建文件,发现提示 cannot touch ‘a.txt’:read-only file system。至此表示我们创建一个只读容器成功。同样我们通过Ctrl+p+q不停止容器并退出到宿主机,在宿主机对应的目录创建一个a.txt,然后进入容器查看容器内部对应目录是否存在a.txt(注:进入容器为docker exec -it 容器id /bin/bash,图片为笔者手抖失误)
进入容器后,cat a.txt成功
容器卷的继承和共享
第一步启动一个容器u1,并在对应的挂载卷创建一个u1data.txt,Ctrl+p+q退出容器,进入宿主机对应目录,查看是否存在u1data.txt。
通过 --volumes-from u1指定 u2继承至u1,在u2容器内部也可以查看到u1data.txt
注意,现在 宿主机和u1,u2互通,因为u2继承至u1,当u1挂掉后,依然不影响宿主机和u2进入互通。当然在u1挂掉的途中,宿主机和u2进行的数据操作,当u1启动后同样会同步回来