首页 > 解决方案 > 是否应该避免使用 docker run 来执行使用 docker-compose 创建的图像?

问题描述

我已经检查了 SO,但找不到详尽的答案。

docker-composer.yml定义了一些东西,包括

app:
    volumes:
        - "./:/app"
    ...

如果我使用实例化图像,那么我将docker run需要再次指定docker-compose.yml.

docker run -v "./:/app"

这对于某些用例可能是可取的,但通常在 2 个不同的地方指定相同的定义并不是真正可维护的(或者对于未来的开发人员来说是显而易见的)。我想避免在不同的位置定义相同的配置(一个 fordocker-compose和一个作为参数docker run)。

是否可以说如果在内部配置(或其他参数)docker-compose.yml,为了拥有它们,图像应该通过docker-compose up而不是运行docker run -v redundant:volume:specification

注意:我问的是最佳实践而不是个人意见。

标签: dockerdocker-composedocker-volumeorchestration

解决方案


您应该将其docker-compose.yml视为为您运行的非常专业的 shell 脚本docker run。尽量减少所需挂载和选项的数量并不是一个坏主意(例如,不要在映像中的代码上绑定挂载代码),但说“这只能通过这个 docker-compose.yml文件”。

还要考虑使用不同语法运行容器的其他方法。Kubernetes和 Hashicorp 的Nomad都有非常不同的语法,并且不能重用docker-compose.yml. 如果您在不同的上下文中运行映像,则基本上无论如何都必须重写此配置。

在有限的范围内——“对于这个开发项目,在这个环境中,在这个特定的存储库中”——说“使用标准选项运行它的标准方法是 via docker-compose up”是合理的,但仍然可以以不同的方式运行图像如果你需要。


推荐阅读