我在使用 Dockerfile 构建应用程序时遇到问题,
我使用了简单的 dockerfiles ,只是 jdk 来启动它,然后我使用控制台命令构建项目,它工作正常。
但是,如果我尝试在 dockerfile 中使用 maven 构建它,它会失败,而且我不知道如何在不构建 maven 之外的应用程序的情况下做到这一点。
如何准备 Dockerfile?
这是应用程序的结构:
create-credit(Parent)
|
|-------> credit(Child) - port 8089 credit app
|
|-------> client(Child) - port 8090 - client app
|
|-------> product(Child) - port 8091 - product app
我用 docker-compose 运行它,为应用程序创建一个数据库
mvn clean install -Dmaven.test.skip=true
docker-compose up
这里是 Dockerfiles:
信用.Dockerfile:
FROM adoptopenjdk/openjdk8:ubi
ADD credit/target/credit-ChocoladeIcecream.jar .
CMD java -jar credit/credit-ChocoladeIcecream.jar
客户端.Dockerfile:
FROM adoptopenjdk/openjdk8:ubi
ADD client/target/client-ChocoladeIcecream.jar .
CMD java -jar client/client-ChocoladeIcecream.jar
product.Docker 文件:
FROM adoptopenjdk/openjdk8:ubi
ADD product/target/product-ChocoladeIcecream.jar .
CMD java -jar product/product-ChocoladeIcecream.jar
和 docker-compose.yml 文件:
version: '3.9'
services:
credit_app:
image: 'credit:latest'
build:
context: ./
dockerfile: credit.Dockerfile
container_name: credit
depends_on:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
- SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
- SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
- CREDIT_PORT=${PORT1}
- CLIENT_PORT=${PORT2}
- PRODUCT_PORT=${PORT3}
ports:
- ${PORT1}:${PORT1}
client_app:
image: 'client:latest'
build:
context: ./
dockerfile: client.Dockerfile
container_name: client
depends_on:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
- SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
- SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
- CREDIT_PORT=${PORT1}
- CLIENT_PORT=${PORT2}
ports:
- ${PORT2}:${PORT2}
product_app:
image: 'product:latest'
build:
context: ./
dockerfile: product.Dockerfile
container_name: product
depends_on:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/${POSTGRES_DB}
- SPRING_DATASOURCE_USERNAME=${POSTGRES_USER}
- SPRING_DATASOURCE_PASSWORD=${POSTGRES_PASSWORD}
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
- PRODUCT_PORT=${PORT3}
- CREDIT_PORT=${PORT1}
ports:
- ${PORT3}:${PORT3}
db:
image: 'postgres:13.1-alpine'
container_name: db
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}