Java Spring Boot 应用程序的 Docker 基础映像 ( FROM
)是什么?
刚刚开始使用 docker,我看到 Dockerfile
内部的FROM
可以为 Java 定义图像,例如
FROM java:8
如果我使用 Gradle(或 Maven)进行构建,那么更好的基础映像是开始避免以后配置 Gradle/Maven 项目的常见内容吗?
当然,Spring Boot 应用程序只是构建输出文件夹中.jar文件,关于如何使用 Docker 运行的问题应该更少(对于使用标准构建工具构建的 Java 项目)
关于如何将 Spring-Boot 与 Docker 集成,有一个很好的文档: https://spring.io/guides/gs/spring-boot-docker/
基本上,您在src/main/docker/Dockerfile
中定义您的 dockerfile 并像这样配置 docker-maven-plugin:
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
Dockerfile:
FROM frolvlad/alpine-oraclejre8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
请注意,在此示例中,FROM frolvlad/alpine-oraclejre8:slim
是一个基于 Alpine Linux 的小占用空间映像。
您还应该能够使用标准的Java 8映像(该映像基于Debian,并且可能会增加占用空间)。可在此处找到可用 Java Baseimages 的广泛列表:https://github.com/docker-library/docs/tree/master/openjdk。
我正在使用使用基本docker image fabric8/java-alpine-openjdk8-jdk:1.2的fabric插件。 不需要 Dockerfile,它是由插件创建的。
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>3.2.28</version>
</plugin>
</plugins>
</build>
目标是 fabric8:build 以创建 docker 镜像和 fabric8:push 以推送 docker 镜像注册表。
mvn clean install fabric8:build fabric8:push