如何在Dockerfile外构建二进制文件用于docker-compose构建



我是新手,可能不太了解docker-compose背后的思想。简短的问题——我看到有docker-compose build命令。我想触发一个(gradle)脚本以外的Dockerfile文件作为运行它的一部分。

假设我在Docker中有一个java web服务,我提前用gradle构建了它。我没有将gradle代理添加到Dockerfile(因为我希望它保持小,对吧?),我只复制二进制文件

FROM openjdk:17-jdk-alpine
RUN apk add --no-cache bash
VOLUME /var/log/app/
WORKDIR /app
ARG EXTRACTED
COPY ${EXTRACTED}/application/ ./
...
ENTRYPOINT ["java","org.springframework.boot.loader.JarLauncher"]

我通过脚本

创建了这个图像
./gradlew build
java -Djarmode=layertools -jar build/libs/*.jar extract --destination build/libs-extracted/
docker build --build-arg EXTRACTED=build/libs-extracted -t my-server .

我可以定义下面的composition .yml。我怎么触发里面的gradle ?或者,与我的单个Dockerfile一样,我希望将docker-compose build包装到构建脚本中?

version: '3.1'
services:
db:
image: postgres:alpine
restart: always
my-server:
image: my-server
restart: always
depends_on:
- db

也许我是在要求一个hack,但实际上我很乐意采取另一种方法,如果它更干净的话

我发现了解决我的任务的多阶段Dockerfile特性,我可以将它用于单独的Dockerfile构建和docker-compose构建。https://stackoverflow.com/a/61131308/1291049。

我可能会失去gradle守护进程优化。

修改docker撰写文件:

version: '3.1'
services:
db:
image: postgres:alpine
restart: always
my-server:
build: 
context: ./my-server
dockerfile: Dockerfile
restart: always
depends_on:
- db

最新更新