我有一个maven项目,其项目结构如下:
parentProject:
parentProject:
APorject.war
BProject.war
parentApiProject:
AProjectApi.jar
BProjectApi.jar
我想在将以下四个项目复制到四个泊坞窗的同时打包项目,并且会运行起来。
有什么好的想法和技术解决方案吗?
答案 0 :(得分:1)
我更喜欢在jar / war文件准备就绪后构建图像(另一种选择是通过plugin将其与maven集成)。但是在这两个选项中,您首先需要创建一个Dockerfile。
您有4个应用程序,因此您需要4个容器(一个容器 - 要做的一件事或要运行的一个服务)。每个容器都有自己的基本映像和设置,具体取决于您运行应用程序的方式。
例如,Dockerfile将jar文件复制到image并使用openjdk运行它:
FROM openjdk:8-jdk
VOLUME /tmp
COPY ./target/application.jar /application.jar
RUN bash -c 'touch /application.jar'
ENTRYPOINT exec java $JAVA_OPTS -jar /application.jar
EXPOSE 7000
要运行war文件,您可能需要tomcat image。
为自定义应用程序添加Dockerfiles后,下一步是创建docker-compose.yml文件。它将包括运行整个项目所需的所有容器(4个自定义应用程序,数据库或任何其他服务)。
version: '3'
services:
application:
build: ./path_to_dockerfile
ports:
- 7000:7000
environment:
- DATABASE_PASSWORD=ASKWejuFy1aPL3dzNv
- ... any other credentials or application configs should be passed by environment variables
- JAVA_OPTS=-Xmx512m -Xms256m -Djava.security.egd=file:/dev/./urandom -Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n
restart: always
depends_on:
- application-db
application-db:
build: ./path_to_db_dockerfile # you can set image name without dockerfile for db
ports:
- 5432:5432
restart: always
volumes:
- db-data
environment:
- DATABASE_PASSWORD=ASKWejuFy1aPL3dzNv
#
# Configuration for other containers
#
volumes:
db-data:
在那里,您将设置Dockerfiles的路径,创建具有依赖关系的专用网络,并且在一切准备就绪后,您可以使用docker-compose up
命令运行它。
答案 1 :(得分:0)
首先,您需要创建一个Dockerfile。
您可以在此处参考以获得更多解释。
How to dockerize maven project? and how many ways to accomplish it?
答案 2 :(得分:0)
你想要一个Docker容器运行整个东西吗?如果是这样,您需要从基础泊坞窗图像开始。从用于运行Web应用程序的VM的基本映像开始。然后将模块作为图层添加到docker镜像中,因为它们最不容易受到更改的影响。这将有助于您利用docker layer缓存功能。