docker 的目录挂载的新语法

这两种挂载目录和文件的写法有什么不同吗?

--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf

-v /path-on-host-machine/my.cnf:/etc/my.cnf

解答:

这两种写法在功能上有相似之处,都是将主机上的文件或目录挂载到 Docker 容器中,但它们之间有一些重要的区别。具体来说:

1. --mount 和 -v 的区别:

–mount 语法:

--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf
  • –mount 是 Docker 1.13 版本及以后引入的标准语法,提供了更为灵活、清晰和功能强大的挂载选项。
  • 它的语法要求显式指定挂载的类型(type=bind),源路径(src)和目标路径(dst)。
  • –mount 语法更具可读性,并且适用于 Docker 的各种类型的挂载(bind、volume、tmpfs)。

-v 语法:

-v /path-on-host-machine/my.cnf:/etc/my.cnf
  • -v(或者 --volume)是 Docker 的早期语法,虽然它也可以用于挂载本地文件(bind 类型),但相对于 --mount 来说,它的功能上有一些局限。
  • -v 更简洁,但不如 --mount 语法那么灵活,因为它不要求你明确指定挂载类型,默认是 volume 类型,且不那么清晰。

2. 区别的关键点:

  • 语法和清晰度:

  • –mount 语法需要你显式地指定挂载类型(bind 或 volume 等),并且通过 src 和 dst 来明确源路径和目标路径。

  • v 语法更加简洁,但是没有显示地声明挂载类型(默认是 volume),并且不那么直观。

  • 功能灵活性:

  • –mount 提供了更强的灵活性,支持 bind、volume 和 tmpfs 类型的挂载,并且能够更好地支持容器间的不同挂载方式。

  • -v 只支持 volume 和 bind 类型的挂载,而且无法像 --mount 那样为挂载指定更多的细节和配置(如只读挂载、挂载选项等)。

  • 一致性:

  • –mount 是更现代和一致的方式,推荐在新的 Docker 版本中使用,因为它提供了更多的选项和清晰的语法。

  • -v 仍然被广泛使用,尤其在旧代码或一些简化场景中,但相较于 --mount 在一些复杂场景下会显得不够灵活。

3. -v 对 bind 挂载的支持:

实际上,-v 语法也可以用来绑定挂载,和 --mount 的 type=bind 一样,例如:

-v /path-on-host-machine/my.cnf:/etc/my.cnf

这条命令会将主机路径 /path-on-host-machine/my.cnf 挂载到容器的 /etc/my.cnf,等效于 --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf。

4. 其他附加选项:

  • 使用 --mount 时,能更好地支持附加的选项,例如:
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf,readonly

上述命令会让挂载的文件成为只读,这在 -v 语法中不能直接指定。

总结:

  • 功能上:两者的作用是一样的,都是将主机上的文件挂载到容器中。

  • 语法上:–mount 提供了更清晰、灵活的语法,推荐用于复杂的挂载场景,而 -v 是简化语法,适用于简单场景。

  • 使用建议:对于更复杂的挂载需求(例如需要指定挂载类型、只读挂载等),建议使用 --mount。对于简单的文件或目录挂载,-v 也足够简洁有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值