DockerCompose构建一个映像并运行多个容器



我有一个docker compose文件,它构建了4个映像并运行了4个容器,这很好。但在我用来构建4个映像的4个Dockerfile中,唯一的区别是cmd。我只是想知道是否有更好的方法可以做到这一点,比如只需更改cmd、就可以构建一个映像并从该映像运行4个容器

这是我的docker-compose.yml

version: '3.6'
services:
esg_scoring.insight:
build:
context: .
dockerfile: insight/Dockerfile
esg_scoring.momentum:
build:
context: .
dockerfile: momentum/Dockerfile
esg_scoring.pulse:
build:
context: .
dockerfile: pulse/Dockerfile
esg_scoring.sasb_mapping:
build:
context: .
dockerfile: sasb_mapping/Dockerfile

如果您需要多个容器运行同一个映像,并且仅在启动它们的命令上有所不同,那么您绝对应该避免使用多个docker映像,并使用相同的映像。

docker-compose中的command指令就是您要查找的。

此外,您可以使用YAML锚点语法来重用代码块并简化代码。

下面是一个使用相同映像、使用不同命令的4个服务的示例。您可以将所有通用的参数放在default设置下:

services:
bash:
build: .
command: bash
<<: &default
image: me/my-image
web:
<<: *default
command: bundle exec run server start
setup:
<<: *default
command: bundle exec run db setup
jobs:
<<: *default
command: bundle exec run job runner

这种方法的好处是,当您运行docker-compose build时,它只会构建一次,因为build指令在default设置之外。

最新更新