美文网首页
使用 Docker 部署 Spring Boot 2

使用 Docker 部署 Spring Boot 2

作者: 舌尖上的大胖 | 来源:发表于2018-12-21 23:30 被阅读0次

    Spring Boot 可以在构建时,同时构建 Docker 镜像。本文先说结果,再说过程。

    一、结论

    前提条件:

    • Spring Boot Web 应用,监听 8080 端口提供服务
    • 以 Jar 形式发布
    • 使用 Gradle 构建

    1、创建工程并配置构建文件

    创建工程,配置构建文件 build.gradle,内容如下:

    buildscript {
        ext {
            springBootVersion = '2.1.1.RELEASE'
        }
        repositories {
            mavenCentral()
            maven {
                url "https://plugins.gradle.org/m2/"
            }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.20.1"
        }
    }
    
    plugins {
        id "com.palantir.docker" version "0.20.1"
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    
    apply plugin: "com.palantir.docker"
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    
    dependencies {
        implementation('org.springframework.boot:spring-boot-starter-web')
        testImplementation('org.springframework.boot:spring-boot-starter-test')
    }
    
    
    
    docker {
        name "${project.group}/${bootJar.baseName}"
        copySpec.from(tasks.bootJar.outputs.files.singleFile).into("dependency")
        dockerfile file('src/Docker/Dockerfile')
    }
    

    2、创建 Dockerfile

    创建 src/Docker/Dockerfile 文件,内容如下:

    FROM openjdk:8-jdk-alpine
    COPY "dependency/*" "/app/app.jar"
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
    

    3、构建

    先执行 build/bootJar 任务,然后执行 docker/docker 任务。

    构建成功后,查看 Docker 镜像:

    $ docker images
    

    4、运行镜像

    将宿主机的 9999 端口映射到容器的 8080 端口:

    $ docker run -it -p 9999:8080 com.example/docker-demo
    

    二、过程描述

    1、编辑 Gradle 构建文件

    编辑 build.gradle 的内容,引用插件,编写 Docker 构建任务。
    以下内容为在原脚本上增加的内容:

    buildscript {
        repositories {
            maven {
                // 仓库位置
                url "https://plugins.gradle.org/m2/"
            }
        }
        dependencies {
            // 依赖
            classpath "gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.20.1"
        }
    }
    
    // 引用插件
    plugins {
        id "com.palantir.docker" version "0.20.1"
    }
    
    apply plugin: "com.palantir.docker"
    
    // Docker 任务
    docker {
        // 镜像名称
        name "${project.group}/${bootJar.baseName}"
        // 将 bootJar 任务的输出内容,复制到 build/docker/dependency 下
        // build/docker/ 为 Docker 工作目录
        // 后续 Dockerfile 中复制文件时,都相对这个位置进行
        copySpec.from(tasks.bootJar.outputs.files.singleFile).into("dependency")
        // 指定 Dockerfile 的位置
        dockerfile file('src/Docker/Dockerfile')
    }
    

    Gradle 的 Docker 插件是 com.palantir.docker,插件源码在 GitHub。这个插件是 Spring 官网 Demo 使用的插件。

    类似的插件还有 gradle-docker-plugin,不过这个未经尝试。

    2、Dockerfile 内容

    创建 src/Docker/Dockerfile 文件,内容如下:

    # 基础镜像
    FROM openjdk:8-jdk-alpine
    # 复制文件,源位置为相对 Docker 工作目录的位置,这个在 Gradle 脚本中指定
    COPY "dependency/*" "/app/app.jar"
    # 启动容器时运行的命令
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
    

    三、参考资料

    (完)

    相关文章

      网友评论

          本文标题:使用 Docker 部署 Spring Boot 2

          本文链接:https://www.haomeiwen.com/subject/avebkqtx.html