【docker基础】: 数据持久化--bind

79 阅读2分钟

数据持久化-bind

另一种数据持久化方式--bind

上文我们讲了使用volume来进行数据持久化,这篇文章我们来介绍另一种持久化方法,bind。

它与volume同属于 run 选项 --mount, 它们属于不同的type,下面是官网对它们的对比介绍

image.png

它是把主机的目录位置与容器相关联,是对主机的数据有影响的操作。

具体区别

  1. 用途不同:

volume: 用于持久化数据,将容器内的某个目录挂载到一个文件卷,该文件卷的修改会永久保存。

bind: 用于共享数据,将主机的某个目录挂载到容器内,主机和容器可以双向修改该目录里的数据。

  1. 管理不同:

volume: 使用 docker volume 命令管理。

bind: 使用主机操作系统的文件系统命令管理。

两种写法

docker run -v /host/path:/container/path my_image
docker run --mount type=bind,src=/host/path,target=/container/path my_image

在这两个命令中,都使用了 type=bind 类型的挂载,将主机上的 /host/path 目录挂载到容器内部的 /container/path 目录中。

需要注意的是,--mount 命令还支持其他类型的挂载,例如使用 Docker 管理的卷,而 -v 命令只能用于挂载主机文件系统中的目录。因此,在一些高级场景下,使用 --mount 命令可能更加灵活和方便。

bind使用

  1. 我们前一篇文章构建了一个ubuntu镜像拥有vim和sudo的,下面来使用它。
  2. 使用docker run -it --mount type=bind,src=%cd%\test,target=/test/hhh my_image:1.0,将当前文件路径的test目录挂载到容器的/test/hhh。
  3. 我们在主机的test目录下创建文件: test.txt,写上内容:

image.png

  1. 去容器中查看该文件vim test.txt:

image.png

发现主机的修改,容器也相应的发生了变化

  1. 容器里面添加一个文件: vim hhh.txt, 写上:

image.png

然后去主机查看:

image.png

发现确实成功了,证明数据是双向的,容器或者主机的修改都会影响数据。