docker--volume数据卷挂载方式

docker数据卷的挂载有四种方式:

第一种方式,显示挂载主机目录:

docker run  -v [src]:[dest]

如果src 不进行绝对路径指定,那么并不会挂载到想要挂载的主机目录上,相当于没有指定挂载的主机目录,但是对那个特定目录进行了别名。(查看 docker inspect )

同时,如果启用了selinux 并且没有配置相应上下文,会出现权限拒绝的情况

第二种方式,不指定挂载的主机目录:

docker run -v [dest]

此时,会自动挂载到主机的一个自动创建的特定目录(可以通过inspect查看)

其主要宗旨是将使用此种方式挂载的容器作为一种数据卷容器,提供给其他容器挂载,而不是在主机上直接对所挂载的数据卷进行修改(实际上,其他容器跟数据卷容器之间都是挂载了同一个目录,只不过,这个目录对用户来说是隐藏的)

并且,这种方式创建的挂载点,因为本质上是对主机目录的挂载,本身容器是不需要启动,别的容器就可以过来挂载的。只有当没有任何一个容器挂载的时候,会自动删除主机上的特定目录。

第三种方式,挂载其他数据卷容器的目录:

docker run –volumes-from [container_name]

挂载其他容器的挂载目录(无论其他容器以什么方式挂载),以达到不同容器间数据互通的效果。本质上,它们都是挂载同一个目录,并且这个目录是存在于主机上的。

第四种方式,通过dockerfile 方式指定

在Dockerfile中声明 VOLUME [“”, …]

声明之后,只要通过这个Dockerfile创建的镜像生成的容器都有了挂载点。不过通过这种方式创建的,无法指定主机目录,都是自动创建的

 

最佳实践

通过创建专门的数据卷容器,来达到多个容器间共享数据

点赞

发表评论

电子邮件地址不会被公开。