docker - 是否应该避免使用 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
?
注意:我问的是最佳实践而不是个人意见。
解决方案
您应该将其docker-compose.yml
视为为您运行的非常专业的 shell 脚本docker run
。尽量减少所需挂载和选项的数量并不是一个坏主意(例如,不要在映像中的代码上绑定挂载代码),但说“这只能通过这个 docker-compose.yml
文件”。
还要考虑使用不同语法运行容器的其他方法。Kubernetes和 Hashicorp 的Nomad都有非常不同的语法,并且不能重用docker-compose.yml
. 如果您在不同的上下文中运行映像,则基本上无论如何都必须重写此配置。
在有限的范围内——“对于这个开发项目,在这个环境中,在这个特定的存储库中”——说“使用标准选项运行它的标准方法是 via docker-compose up
”是合理的,但仍然可以以不同的方式运行图像如果你需要。
推荐阅读
- mysql - 我如何选择上个月的时间间隔?,它也必须在上个月最后一天的下午 1 点到实际当天的中午之间
- r - 从 R 数据框中的第一个非 NA 值创建“行”
- visual-studio - 如何解决 StatusCode: 415, ReasonPhrase: 'Unsupported Media Type'?
- python - 在不减少存储元素的情况下减去 csr 矩阵
- javascript - 将 JavaScript 字符串格式化为 2 列
- java - WebFlux + freemarker 查询参数不可用
- docker-compose - 注册 gitab-runner 抛出无法分配请求的地址(ubuntu、docker)
- networking - 每个端口都有独特的规格吗?
- javascript - 如何初始化 java 脚本字典(类似于 python 中的 setdefault)
- arrays - patchValue 仅返回最后一个索引的值