Docker Compose:如何配置拆分为多个Docker文件的多阶段Docker映像?

Docker Compose:如何配置拆分为多个Docker文件的多阶段Docker映像?,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有3个文件 /Dockerfile FROM rust:1.43.1 WORKDIR /usr/src/hiro COPY . . RUN cargo build /Dockerfile.master FROM me/base RUN chmod +x ./target/debug/hiro CMD [ "./target/debug/hiro", "--master", "-p", "${PORT}" ] F

我有3个文件

/Dockerfile

FROM rust:1.43.1
WORKDIR /usr/src/hiro
COPY . .
RUN cargo build
/Dockerfile.master

FROM me/base
RUN chmod +x ./target/debug/hiro
CMD [ "./target/debug/hiro", "--master", "-p", "${PORT}" ]
FROM me/base
RUN chmod +x ./target/debug/hiro
CMD [ "./target/debug/hiro", "--worker", "-p", "${PORT}" ]
/Dockerfile.worker

FROM me/base
RUN chmod +x ./target/debug/hiro
CMD [ "./target/debug/hiro", "--master", "-p", "${PORT}" ]
FROM me/base
RUN chmod +x ./target/debug/hiro
CMD [ "./target/debug/hiro", "--worker", "-p", "${PORT}" ]
构建(不含Docker Compose) 然后呢,

docker build -t me/master -f Dockerfile.master .
我正在创建
master
worker
,它们来自于编译源代码的同一个基础映像。有点像在这个问题中所解释的:

问题: 如何配置docker-compose.yml以从同一个基本映像生成两个映像?

如果两个映像之间唯一不同的是
CMD
,那么在
docker-compose.yml
中很容易重写

版本:“3.8”
服务:
大师:
建造:。#使用基本Dockerfile
命令:./target/debug/hiro--master--端口12345
工人:
生成:。
命令:./target/debug/hiro--worker--port 12345
另一个很容易通过这种方式定制的是每次调用的环境变量。不过,请注意,这不会使用不同的变量遍历和重建图像;它只会在不同的环境下启动最终的
CMD

您的问题显示普通的
docker build
命令;使用plain
docker run
时,图像名称后面的任何内容都类似地解释为要运行的命令

docker run ... me/base \
  ./target/debug/hiro --worker --port 12345

(如果您正在寻找这方面的其他示例,这在Python Django/Cellery应用程序中尤其常见。“主”应用程序是基于Django的Web服务器,但它与Cellery任务运行程序共享其大部分源代码树,您可以使用相同的图像但不同的命令启动Cellery worker。)

BTW,我找到了我问题的答案