您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Docker 数据管理:数据卷

我们知道,Docker 提供了两类数据管理的方式:

挂载宿主机目录或;

使用数据卷;

上节课我们学习了挂载宿主机目录或的数据管理方式。本节,我们介绍如何使用 Docker 数据卷。但是明明可以使用挂载宿主机目录或的方式,为什么还要使用数据卷呢?

其实,使用数据卷的好处就在于:我们不必自己维护外部路径挂载和存储的关系,借助Docker管理数据,并且通过语义化数据卷命名,更加方便直观地使用它来

1. 使用数据卷

在使用数据卷进行挂载时,我们只需指定容器中被挂载的目录即可:

docker run -d -it --name busy@R_397_2@ -v mydata:/tmp busy@R_397_2@

Tips:mydata 是 Docker 数据卷的, 不是宿主机的目录或,为了避免混淆,指定当前路径下的目录或挂载方式时,源地址需要使用。

数据卷挂载到容器后,我们可以通过 docker inspect busy@R_397_2@ 看到容器中数据卷挂载的信息。

其中,Type代表这是挂载类型为volme卷,Name标识数据卷的是我们之前指定的mydataSource标明在要挂载的数据卷在宿主机的真实路径为/var/lib/docker/volumes/mydata/_data,其中/var/lib/docker/volumes/是由Docker的存放路径,Destination表示挂载到 busy@R_397_2@ 容器内的路径是/tmp

2. 共用数据卷

通过挂载相同的数据卷,让多个容器能够操作数据卷中的数据,实现容器目录共享。

数据卷的命名在 Docker 中是唯一的,让多个容器挂载同数据卷, 只需要指定同数据卷即可。

docker run -d -it --name busy@R_397_2@ -v mydata:/tmp busy@R_397_2@
docker run -d -it --name busy@R_397_2@2 -v mydata:/tmp busy@R_397_2@

挂载数据卷时,如果数据卷不存在,Docker 会创建,如果同名数据卷已经存在,则直接引用。

这里我们再补充一些常用的数据卷操作:

# 数据卷docker volume rm mydata# 手动创建数据卷docker volume create mydata# 那些没有被容器引用的数据卷docker volume prune

Tips:使用 docker rm -f busy@R_397_2@ busy@R_397_2@2 移除不再使用的容器。

3. 对比两种挂载方式

数据卷 是受控存储,是由 Docker 引擎进行管理维护的。

使用卷,你可以不必处理 uid、SELinux 等各种权限问题,Docker 引擎在建立卷时会安全规则,以及根据挂载点调整权限。并且可以统一列表、、。另外,除了本地卷外,还网络卷、分布式卷。

挂载目录属于自行维护,你就必须手动处理所有权限问题,好处就在于这种方式与宿主机的交换更方便一些。

4. 小结

数据卷实际上也是宿主机的目录,这个目录由 Docker 管理,利用数据卷可以方便地将数据在多个容器中共享。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的写入操作,都应该使用数据卷或者绑定挂载宿主目录,些位置的读写会跳过容器存储层,直接对宿主发生读写,其和稳定性更高。


联系我
置顶