我是新手,可能不太了解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