如何配置Maven/SpringBoot项目';docker的pom.xml?

如何配置Maven/SpringBoot项目';docker的pom.xml?,maven,spring-boot,docker,Maven,Spring Boot,Docker,我正试图通过Maven将我的SpringMVC应用程序对接。我的目的是有一个图像,然后我可以继续曝光,并通过我的网络浏览器显示 不幸的是,我似乎仍然缺乏对pom.xml的关键性理解,而我必须对pom.xml进行编辑才能实现这一点,还有Dockerfile ====== 以下是Dockerfile: ====== 这是最新版本的 ====== 下面是我在上面引用的SpringIO指南(不包括依赖项部分)的后续版本中的最新修订尝试。 ====== 总之,为了使我的SpringBoot+Maven项目

我正试图通过Maven将我的SpringMVC应用程序对接。我的目的是有一个图像,然后我可以继续曝光,并通过我的网络浏览器显示

不幸的是,我似乎仍然缺乏对pom.xml的关键性理解,而我必须对pom.xml进行编辑才能实现这一点,还有Dockerfile

======

以下是Dockerfile: ======

这是最新版本的

======

下面是我在上面引用的SpringIO指南(不包括依赖项部分)的后续版本中的最新修订尝试。 ======

总之,为了使我的SpringBoot+Maven项目可以部署为docker映像和容器,您将实施哪些更改


此外,您是否会对我的Dockerfile进行修改?感谢您的咨询。谢谢你。

我想没少多少。或者更好的是,事情可能太多了

首先,您需要告诉docker maven插件运行。定义了哪些插件在哪个阶段运行。因此,所有其他插件都需要某个执行配置(在父pom或您的pom中)。其次,不需要解压缩创建的jar文件。SpringBoot将自动创建一个可执行的jar文件。你只需要告诉docker maven插件(它是在哪里创建的)

这将是Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp

ARG JAR_FILE

ADD target/${JAR_FILE} /usr/share/myapp.jar

ENTRYPOINT ["java","-jar","/usr/share/myapp.jar"]
这是你的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot-docker</artifactId>
    <version>0.1.0</version>
    <packaging>jar</packaging>
    <name>Spring Boot Docker</name>
    <description>Getting started with Spring Boot and Docker</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <docker.image.prefix>springio</docker.image.prefix>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.9</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

4.0.0
org.springframework
弹簧靴装卸工
0.1.0
罐子
弹簧靴装卸工
开始使用Spring Boot和Docker
org.springframework.boot
spring启动程序父级
2.1.4.1发布
斯普林尼奥
1.8
org.springframework.boot
springbootmaven插件
com.spotify
dockerfile maven插件
1.4.9
违约
建造
${docker.image.prefix}/${project.artifactId}
${project.build.finalName}.jar
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试

可以删除依赖插件的解包目标。通过这种方式,jar被添加到映像中并直接运行。希望它能起作用

我想没少多少。或者更好的是,事情可能太多了

首先,您需要告诉docker maven插件运行。定义了哪些插件在哪个阶段运行。因此,所有其他插件都需要某个执行配置(在父pom或您的pom中)。其次,不需要解压缩创建的jar文件。SpringBoot将自动创建一个可执行的jar文件。你只需要告诉docker maven插件(它是在哪里创建的)

这将是Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp

ARG JAR_FILE

ADD target/${JAR_FILE} /usr/share/myapp.jar

ENTRYPOINT ["java","-jar","/usr/share/myapp.jar"]
这是你的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot-docker</artifactId>
    <version>0.1.0</version>
    <packaging>jar</packaging>
    <name>Spring Boot Docker</name>
    <description>Getting started with Spring Boot and Docker</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <docker.image.prefix>springio</docker.image.prefix>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.9</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

4.0.0
org.springframework
弹簧靴装卸工
0.1.0
罐子
弹簧靴装卸工
开始使用Spring Boot和Docker
org.springframework.boot
spring启动程序父级
2.1.4.1发布
斯普林尼奥
1.8
org.springframework.boot
springbootmaven插件
com.spotify
dockerfile maven插件
1.4.9
违约
建造
${docker.image.prefix}/${project.artifactId}
${project.build.finalName}.jar
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试

可以删除依赖插件的解包目标。通过这种方式,jar被添加到映像中并直接运行。希望它能起作用

如果您的springboot代码已准备好pom.xml。然后按照以下步骤将应用程序容器化

  • git克隆https://github.com/dnmorris7/teluskoSpringBoot
    (我正在克隆您的springboot代码)
  • git签出模块5
    (签出模块5分支)
  • 在git代码库中创建Dockerfile,包含以下内容:
注意:我正在使用docker多阶段构建,在第一阶段,Sage maven构建jar,在第二阶段,我们在java映像中复制jar

  • 现在构建您的docker镜像
    docker构建-t appimage:v1。
  • 运行docker容器
    docker Run-it-d-p 9090:9090 appimage:v1
  • 点击api以检查其工作是否正常
请点击正确的基本url,我用
/home

注意:如果您想提供自己的自定义
应用程序.properties
,请将
Dockerfile
中的
java-jar
命令更改为
CMD java-jar app.jar--spring.config.additional location=application.properties
并将docker run命令更改为
docker run-it-d-vapplication.properties:/application.properties-p9090:9090 appimage:v1
其中
application.properties
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot-docker</artifactId>
    <version>0.1.0</version>
    <packaging>jar</packaging>
    <name>Spring Boot Docker</name>
    <description>Getting started with Spring Boot and Docker</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <docker.image.prefix>springio</docker.image.prefix>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.9</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
FROM maven:3.6-jdk-8-slim AS build
COPY . /usr/src/app/
WORKDIR /usr/src/app/
RUN mvn -f /usr/src/app/pom.xml clean package

FROM java:8-alpine
WORKDIR /
COPY --from=build /usr/src/app/target/*.jar /app.jar
CMD java -jar app.jar
$ curl localhost:9090/home
{"timestamp":"2019-06-16T05:34:26.655+0000","status":404,"error":"Not Found","message":"/pages/home.jsp","path":"/home"}