springboot官网推荐:使用docker构建springboot镜像(4)最佳实践——使用构建插件

springboot官网推荐:使用docker构建springboot镜像(4)最佳实践——使用构建插件,第1张

文章目录
  • 一、文章推荐
  • 二、Spring Boot Maven和Gradle自带构建插件
  • 三、maven插件-Spotify Maven Plugin
  • 四、gradle插件-Palantir Gradle Plugin
  • 引用

一、文章推荐

springboot官网推荐:使用docker构建springboot镜像
springboot官网推荐:使用docker构建springboot镜像(2)最佳实践
springboot官网推荐:使用docker构建springboot镜像(3)最佳实践

在上面推荐的文章中,我们都是通过调用docker命令来构建镜像的。如果我们不想在构建中直接调用docker,那么Maven和Gradle有一套丰富的插件可以帮我们完成这项工作。

二、Spring Boot Maven和Gradle自带构建插件

只要有Docker环境就行,我们就可以使用Maven或者Gradle的Spring Boot构建插件来创建容器镜像。这些插件使用云原生构建包创建OCI映像(与docker build创建的格式相同),这样我们就不需要编写Dockerfile。

这些默认的构建器针对Spring Boot应用程序进行了优化,并且像《springboot官网推荐:使用docker构建springboot镜像(3)最佳实践》的例子一样,图像被有效地分层。

比如,我们可以在不修改pom.xml 或者build.gradle的情况下,进项镜像构建。
Maven:

./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=myorg/myapp

maven方式官网地址:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#build-image

Gradle

./gradlew bootBuildImage --imageName=myorg/myapp

gradle方式官网地址:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#build-image

以上两种方式第一次构建可能需要很长时间,因为它必须下载一些容器镜像和JDK,但后续构建应该很快。

除了上面maven和gradle自带的构建方式,还有其他的权限。

三、maven插件-Spotify Maven Plugin

Spotify Maven是一个流行插件。这个插件需要我们编写dockerfile,然后为我们运行docker。

dockerfile

FROM openjdk:8-jdk-alpine as build
WORKDIR /workspace/app

COPY mvnw .
COPY .mvn .mvn
RUN ./mvnw -v
COPY pom.xml .
COPY src src

RUN ./mvnw install -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]

构建镜像:

mvn com.spotify:dockerfile-maven-plugin:build

但是此时,我们建立了一个匿名的docker形象。
我们可以通过命令行或者修改pom的方式设置镜像名称和tag
命令行方式:

#tag 默认为laster
mvn com.spotify:dockerfile-maven-plugin:build -Ddockerfile.repository=myorg/myapp
# tag=1.0
mvn com.spotify:dockerfile-maven-plugin:build -Ddockerfile.repository=myorg/myapp -Ddockerfile.tag=1.0

修改pom的方式:

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.4.8</version>
            <configuration>
                <repository>myorg/${project.artifactId}</repository>
                 <tag>${project.version}</tag>
            </configuration>
        </plugin>
    </plugins>
</build>
四、gradle插件-Palantir Gradle Plugin

Palantir Gradle插件需要配合Dockerfile一起工作。如果需要还可以为您生成Dockerfile。

首先修改build.gradle ,引入插件,

buildscript {
    ...
    dependencies {
        ...
        classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.13.0')
    }
}

然后应用插件并调用其任务

apply plugin: 'com.palantir.docker'

group = 'myorg'

bootJar {
    baseName = 'myapp'
    version =  '0.1.0'
}

task unpack(type: Copy) {
    dependsOn bootJar
    from(zipTree(tasks.bootJar.outputs.files.singleFile))
    into("build/dependency")
}
docker {
    name "${project.group}/${bootJar.baseName}"
    copySpec.from(tasks.unpack.outputs).into("dependency")
    buildArgs(['DEPENDENCY': "dependency"])
}

构建镜像:

./gradlew clean build docker -x test
引用

Spotify Maven Plugin

The Palantir Gradle Plugin

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/789979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存