运行docker映像时使用mount bind与使用卷的优缺点
到目前为止,当我运行docker images时,我通常会:运行docker映像时使用mount bind与使用卷的优缺点,docker,Docker,到目前为止,当我运行docker images时,我通常会: docker run -d -it --name test \ -v $(pwd)/target:/app/ theimage 然而,我现在正在检查另一个人的docker代码,我发现 docker run -d -it --name test \ --mount type=bind,source=$(pwd)/target.target=/app \ theimage 我读到,两者的基本功能是相似的。 我想听
docker run -d -it --name test \
-v $(pwd)/target:/app/
theimage
然而,我现在正在检查另一个人的docker代码,我发现
docker run -d -it --name test \
--mount type=bind,source=$(pwd)/target.target=/app \
theimage
我读到,两者的基本功能是相似的。
我想听听有经验的Docker用户的意见,他们之间有什么不同,为什么我更喜欢一个而不是另一个。他们是相同的,只是
--mount
选项仅在Docker的较新版本中,而且语法更为详细。原则上支持更多选项,因此您可以为自动创建的命名卷指定标签等设置,但我从未特别需要这些设置
我通常使用
-v
选项(或)。它更方便一点,而且我不需要额外的选择。对于您所展示的简单绑定挂载来说,这是双倍正确的(但我不建议使用绑定挂载覆盖整个/app
目录。这意味着在部署映像之前,您永远不会运行内置在映像中的代码,这会导致生产失败。您可以使用本地解释器进行开发,使用Docker进行部署;这没有错。)感谢您的回答。很抱歉,我无法理解您的评论。您能详细说明一下吗?Docker映像通常应该是自包含的:如果您要部署映像,它包含所有应用程序代码及其依赖项,并且您不需要单独复制应用程序代码(再次)到目标系统。但是在所有/app
上绑定挂载往往会绝对隐藏Dockerfile所做的一切,因此您在开发中运行的容器与您最终可能在生产中运行的内容无关。这否定了使用Docker的一个主要目标,而且会带来相当不方便的开发环境我不喜欢它。