数据持久化-bind
另一种数据持久化方式--bind
上文我们讲了使用volume来进行数据持久化,这篇文章我们来介绍另一种持久化方法,bind。
它与volume同属于 run 选项 --mount, 它们属于不同的type,下面是官网对它们的对比介绍
它是把主机的目录位置与容器相关联,是对主机的数据有影响的操作。
具体区别
- 用途不同:
volume: 用于持久化数据,将容器内的某个目录挂载到一个文件卷,该文件卷的修改会永久保存。
bind: 用于共享数据,将主机的某个目录挂载到容器内,主机和容器可以双向修改该目录里的数据。
- 管理不同:
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使用
- 我们前一篇文章构建了一个ubuntu镜像拥有vim和sudo的,下面来使用它。
- 使用
docker run -it --mount type=bind,src=%cd%\test,target=/test/hhh my_image:1.0
,将当前文件路径的test目录挂载到容器的/test/hhh。 - 我们在主机的test目录下创建文件: test.txt,写上内容:
- 去容器中查看该文件
vim test.txt
:
发现主机的修改,容器也相应的发生了变化
- 容器里面添加一个文件:
vim hhh.txt
, 写上:
然后去主机查看:
发现确实成功了,证明数据是双向的,容器或者主机的修改都会影响数据。