Docker数据存储之Bind mounts

阅读本文前,希望你已经对Volumes有了初步的了解,具体可以参考这篇文章:

默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式:

  • Volumes
  • Bind mounts
  • tmpfs mounts

下图展示了这三种技术:


image.png

Bind mounts

Bind mounts模式和Volumes非常相似,不同点在于Bind mounts模式是将宿主机上的任意文件或文件夹挂载到容器,而Volumes本质上是将Docker服务管理的一块区域(默认是/var/lib/docker/volumes下的文件夹)挂载到容器。

Bind mounts的使用和Volumes类似,也是通过-v--mount参数将宿主机文件挂载容器中。下面是一个例子:

使用--mount参数时,需要指定type=bind

$ docker run -d \
  --name=nginxtest \
  --mount type=bind,source=/usr/local/web,destination=/usr/share/nginx/html \
  nginx:latest

上面的例子将宿主机上的/usr/local/web文件夹挂载到容器中的/usr/share/nginx/html文件夹。

或者使用-v参数:

$ docker run -d \
  --name=nginxtest \
  -v /usr/local/web:/usr/share/nginx/html \
  nginx:latest

挂载成功后,容器从/usr/share/nginx/html目录下读取或写入数据,实际上都是从宿主机的 /usr/local/web目录中读取或写入数据。因此Volumes或Bind mounts也可以看作是容器和宿主机共享文件的一种方式。

如果你使用Bind mounts挂载宿主机目录到一个容器中的非空目录,那么此容器中的非空目录中的文件会被隐藏,容器访问这个目录时能够访问到的文件均来自于宿主机目录。这也是Bind mounts模式和Volumes模式最大的行为上的不同。

Bind mounts使用场景

请参考这篇文章:Docker数据存储总结

参考文章

推荐阅读更多精彩内容

  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 660评论 0 7
  • 默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操...
    伊凡的一天阅读 931评论 0 2
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 6,319评论 0 115
  • 渠道为王的时代,通路建设是当家花旦! 内容为王的时代,信息高效传递是必由之路! 直播是标配,互动是关键! 米听直播...
    米听meeting阅读 32评论 0 0
  • 一生中, 我似乎总在开始又总在结束, 已然记不得了, 究竟还需要怎样 才算是把自己折腾了个够, 才算是个头, 归零...