1.说明
容器数据卷是什么?就像我们平时用来拷贝数据的U盘。
容器数据卷的作用:
1.容器的持久化
2.容器间继承、共享数据
3.容器与宿主机之间的数据共享
2.容器内添加数据卷
先看看我主机的目录情况,准备在根目录的 opt目录下操作:
本次操作的镜像为centos,执行以下命令:
docker run -it -v/宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /opt/docker_share :/data_sare centos
宿主机文件夹为 /opt/doker_share
,容器文件夹为 data_sare
查看一下容器的目录结构:
容器内部成功创建一个指定名字的、共享的数据目录。
再 ctrl+p+q
不退出容器返回宿主机查看宿主机的情况:
没毛病。
3.测试数据是否共享
在主机的共享目录docker_share
下创建文件 aaa.txt
并写入内容:
再次进入容器的交互命令行终端:
也是可以看到主机上修改的文件的,接着尝试在容器内修改:
再换个方式试一下,把容器关闭退出,主机修改文件,看看是否能共享:
可以在容器内直接输入 exit
关闭退出,下面是在主机的终端关闭退出:
docker stop 容器id
然后再来修改一下 aaa.txt
: 新增内容: update by host…
保存退出再重新运行容器查看一下是否同步:
可见,使用数据卷可以完成容器和主机之间数据的共享、持久化。
4.创建数据卷并且带权限的命令
前面的方式是两边都可以读写的,并没有权限方面的限制。
现在来尝试一下给数据卷带上权限,命令:
docker run -it -v /主机绝对路径目录:容器内目录:ro 镜像名
ro
是 read only,只读的意思。
在主机上修改aaa.txt
,内容只有 update by host ...
,然后保存退出:
然后再带数据卷、权限启动容器:
docker run -it -v /opt/docker_share:/data_share:ro centos
查看aaa.txt:
尝试修改aaa.txt的内容:
vi aaa.txt
修改后尝试保存:
提示: E45: 'readonly' option is set (add ! to override)
只读、不能修改,权限设置成功。