gpt4 book ai didi

docker - Docker Compose:如何配置分为多个Dockerfile的多阶段Docker镜像?

转载 作者:行者123 更新时间:2023-12-02 21:30:59 26 4
gpt4 key购买 nike

我有3个Dockerfile
./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}" ]
./Dockerfile.worker
FROM me/base
RUN chmod +x ./target/debug/hiro
CMD [ "./target/debug/hiro", "--worker", "-p", "${PORT}" ]
构建(无需Docker Compose)
docker build -t me/base -f Dockerfile .
然后,
docker build -t me/master -f Dockerfile.master .
docker build -t me/worker -f Dockerfile.worker .
我正在用相同的基础镜像创建 masterworker,这完成了艰苦的源代码编译工作。有点像这个Stackoverflow问题中的解释: Docker Multi-Stage: How to split up into multiple Dockerfiles

如何配置docker-compose.yml以从同一基本镜像构建两个镜像?

最佳答案

如果两个图像之间唯一不同的是CMD,则很容易在docker-compose.yml中覆盖。

version: '3.8'
services:
master:
build: . # uses the base Dockerfile
command: ./target/debug/hiro --master --port 12345
worker:
build: .
command: ./target/debug/hiro --worker --port 12345
易于定制的另一件事是每次调用环境变量。但是请注意,这不会通过不同的变量来重建图像。它只会在不同的环境下启动最终的 CMD
您的问题显示了简单的 docker build命令;使用简单的 docker run后,镜像名称之后的任何内容都类似地解释为要运行的命令。
docker run ... me/base \
./target/debug/hiro --worker --port 12345
(如果您正在寻找其他示例,这在Python Django / Celery应用程序中尤为常见。“主”应用程序是基于Django的Web服务器,但它与Celery任务运行器共享其大部分源代码树,然后您使用相同的图像但使用不同的命令启动Celery worker。)

关于docker - Docker Compose:如何配置分为多个Dockerfile的多阶段Docker镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64487984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com