Docker Compose:如何配置拆分为多个Docker文件的多阶段Docker映像?
我有3个文件 /DockerfileDocker 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
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
命令;使用plaindocker run
时,图像名称后面的任何内容都类似地解释为要运行的命令
docker run ... me/base \
./target/debug/hiro --worker --port 12345
(如果您正在寻找这方面的其他示例,这在Python Django/Cellery应用程序中尤其常见。“主”应用程序是基于Django的Web服务器,但它与Cellery任务运行程序共享其大部分源代码树,您可以使用相同的图像但不同的命令启动Cellery worker。)BTW,我找到了我问题的答案