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

Mut*_* PL 2 docker docker-compose

我有一个 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
Run Code Online (Sandbox Code Playgroud)

Dan*_*nyB 7

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

command中的指令就是docker-compose您正在寻找的内容。

此外,您可以使用 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
Run Code Online (Sandbox Code Playgroud)

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