Docker学习笔记九:Docker数据卷知识【重要】
介绍
目的
- 数据卷(Data Volumes)是宿主机中的一个目录或文件,数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期。
- 一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷(即:可实现多个容器数据共享)。
- 当容器目录和数据卷目录绑定后,修改之后会立即同步。
- Docker不会在容器被删除时删除其挂载的数据卷。(注:持久化)
特点
-
数据卷可以在容器之间共享和重用,本地与容器间传递数据更高效。
-
数据卷的修改会立马有效,在容器内部与本地目录均可对数据卷进行修改。
-
数据卷的更新,不会影响镜像,对数据与应用进行了解耦操作。
-
数据卷会一直存在,即使是没有容器使用。
作用
说明
- 在docker中,容器的数据读写默认发生在容器的存储层,当容器被删除时其上的数据将会丢失。
- 要想实现数据的持久化,需要将容器与宿主机进行数据卷的挂载。
- 目前docker提供了三种方式将数据从宿主机挂载到容器中:
- Volume:普通数据卷,映射到/var/lib/docekr/volumes目录下。
- Bind Mounts:常用方式,绑定数据卷,映射到宿主机指定路径下
- tmpfs mounts:临时卷,只存在于宿主机内存中
实现
- 使用“docker run”创建容器时,添加参数“-v 宿主机目录:容器目录:模式”来指定容器与宿主机的目录挂载
- -v 宿主机目录:容器目录:模式:目录如果没有,会自动进行创建
- mode:默认是RW可不写,RW:可读可写,RO:容器内只读
- --privileged=true:目录映射时避免出现权限问题(ps:解决docker挂载主机目录访问出现cannot open directory .: Permission denied)
- 示例:docker run -d --name=jenkins --privileged=true -v /usr/local/apache-maven-3.8.3:/usr/local/apache-maven-3.8.3:rw jenkins:latest
卷的继承和共享
说明
- 容器卷的继承,类似Java类的继承。
- 容器卷继承指的是:子容器继承父容器的容器卷的挂载方式。
- 容器卷继承之后,子容器对挂载的数据卷操作不受父类影响,如:父容器停掉之后,子容器可以继续对挂载的目录进行操作。
- 容器卷继承之后,实现了多个容器挂载同一个目录,实现了容器之间数据的共享。
实现
-
使用“docker run”创建容器时,添加参数“--volumes-from 父类容器名/父类容器ID”来指定新建的容器继承的容器卷信息
- --volumes-from 父类容器名/父类容器ID:新建容器会继承父容器的容器卷挂载的方式
-
示例:docker run -d --privileged=true --volumes-from jenkins1 --name jenkins2 jenkins:latest