一、Docker 数据卷管理
在实际使用过程中,我们需要把容器和数据进行隔离,因为容器在使用过程中可能随时要进行销毁,但是数据要保留下来,所以我们要做数据的持久化。
- 为什么要用数据卷
- docker分层文件系统
- 性能差
- 生命周期与容器相同
- docker数据卷
- mount到主机中,绕开分层文件系统
- 和主机磁盘性能相同,容器删除后依然保留
- 仅限本地磁盘,不能随容器迁移
- docker提供了两种卷:
- bind mount
- docker managed volume
1.1 bind mount
- bind mount
- 是将主机上的目录或文件mount到容器里。
- 使用直观高效,易于理解。
- 使用 -v 选项指定路径,格式 <host path>:<container path>
在做实验之前先把不用的资源删掉:
创建容器并创建文件:
可以看到持久化到本机的目录中了。如果存在则直接挂载,如果不存在则创建。可以看到某些镜像已经写好了将数据存入哪里,那我们在创建容器的时候就必须写这个路径。
如果我们只是想把数据挂接到容器内,而不是要对数据进行增改:
可以看到即可以对一个目录进行设置只读,也可以只对一个文件设置只读。
1.2 docker managed volume
- docker managed volume
- bind mount必须指定host文件系统路径,限制了移植性。
- docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录。
- 默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
- 如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
即只有在镜像构建时有VOLUME参数,使用 docker managed volume 创建容器时才会做持久化,不然不会作持久化的。