Docker 容器数据卷
1 卷是什么
卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上(直接挂载主机上的文件或目录到容器中)。卷的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题。使用卷可以将容器内的目录或文件持久化,当容器重启后保证数据不丢失,例如我们可以使用卷将 MySQL 的目录持久化,实现容器重启数据库数据不丢失。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
卷的用途就是将Docker内的数据保存到宿主机的磁盘中
2 docker run -v 挂载
在启动容器的时候添加-v参数即可, 使用格式为:-v HOST_PATH:CONTIANAER_PATH
完整命令:
docker run -v 宿主机路径:容器内路径[:读写权限] --privileged=true [其它参数] image
- -v 要挂载多个目录、文件, 写多个-v HOST_PATH1:CONTIANAER1 -v HOST_PATH2:CONTIANAER2
- 读写权限 是对容器内的限制,默认为rw 可读可写,其它可选值还有ro 只读
- –privileged=true,设置为true, container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限,建议加上,否则可能会出现:“ cannot open directory .: Permission denied”
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,ESELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用-privleged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即**使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
2.1 挂载规则
- 挂载目录
- 若宿主机和默认容器都不存在目录,则会创建所写的对应目录
- 若宿主机存在目录,且里面有文件,而容器没有目录,则会将宿主机的目录同步映射到容器
- 若容器有目录,且有文件,宿主机有目录(没目录也一样),没有文件。 会将目录覆盖,以宿主目录为主,挂载后的容器目录为空。因为宿主机的目录为空,至于很多镜像 启动后可以从容器“挂载”出目录内容,目前猜测 这些内容是 目录挂载完成后,目录内容是通过安装程序或拷贝命令 来的
总的来说就是,没有目录就创建,以宿主机的目录为准,直接覆盖容器的目录(就是将目录复制到容器,包括目录所有文件)
2.文件挂载
- 需要挂载文件,宿主机的文件必须存在,否则会把文件当成目录挂载
- 在进行容器目录挂载的时候,若要设置配置文件的挂载,需要挂载相对应的配置文件,且宿主机的配置文件需要有默认值;
在容器启动时,会使用挂载的配置文件进行初始化,若文件找不到或为空,会导致启动失败。若挂载整个配置文件的目录,会将容器默认的配置文件夹覆盖,从而导致启动失败,因此只需要将要修改的配置文件进行挂载映射即可。
2.2 读写限制
docker run -v 宿主机路径:容器内路径[:读写权限] --privileged=true [其它参数] image
读写权限 是对容器内的限制,默认为rw 可读可写,其它可选值还有ro 只读
2.3 卷的继承和共享
启动时加参数
–volumes-from 父类容器ID
其实质就是: -v 父类容器ID的挂载规则 ,容器移动后 跟父容器除挂载目录一样外并无其它关系
3 创建卷后再使用卷
3.1 创建数据卷卷
我们使用以下命令创建一个名为 myvolume 的数据卷:

最低0.47元/天 解锁文章
1789

被折叠的 条评论
为什么被折叠?



