1. 介绍

介绍如何使用docker提供容器服务.因为升级到spring boot2.1.4以上 ,因此改用com.palantir.docker的gradle插件进行容器部署.

可比较spring boot 1.x和Gb的容器部署gb Docker 部署with spring boot 1.x

2. 使用

2.1. 使用gradle 插件

修改buld.gradle文件 ()

buildscript {
    ext {
        //...
        dockerBuildDir = mkdir("${buildDir}/docker")                 (1)
    }
    //...
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }               (2)
        jcenter()
        mavenCentral()
    }
    dependencies {
        //...
        classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.22.1')  (3)
    }
}
//...
bootJar {
    baseName = 'xxx-project'                          (4)
    version = '0.0.1-SNAPSHOT'
}
group = 'gb-project'                                 (5)

//...
apply plugin: 'com.palantir.docker'                   (6)
...
task prepareDocker(type: Copy, dependsOn: assemble) {                  (7)
    description = 'Copy files from src/main/docker to Docker temporal build directory'
    group = 'Docker'
    from 'src/main/docker'
    into dockerBuildDir
}

task unpack(type: Copy, dependsOn: prepareDocker) {               (8)
    dependsOn bootJar
    from(zipTree(tasks.bootJar.outputs.files.singleFile))
    into("build/dependency")
}
docker {                                                     (9)
    name "${project.group}/${bootJar.baseName}"
    copySpec.from(tasks.unpack.outputs).into("dependency")
    buildArgs(['DEPENDENCY': "dependency"])
}
1 定义变量
2 增加插件服务器地址
3 docker插件引入
4 标记jar包的名称和版本
5 标记项目的隶属组
6 应用插件
7 预处理任务
8 解压任务
9 添加docker命令

2.2. 编写dockerfile 文件

2.2.1. 配置解压缩jar文件后运行的docker文件

在src/main/docker目录下创建Dockerfile文件,内容如下

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=build/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","org.yunchen.gb.project.DemoApplication"]

2.2.2. 配置按jar模式运行的docker文件

在src/main/docker目录下创建Dockerfile文件,内容如下

 FROM openjdk:8-jdk-alpine
 VOLUME /tmp
 ARG JAR_FILE
 COPY ${JAR_FILE} app.jar
 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
不推荐按jar模式运行,建议使用解压缩jar文件后运行

2.2.3. 运行部署

执行命令

$ ./gradlew build docker

命令会在本地生成image

2.2.4. 生成container

执行命令

$ docker run -itd -p 8080:32729 --name project-container gb-project/xxx-project

2.2.5. 查看

打开kitematic, 查看运行情况

2.2.6. 删除container和image

在kitematic中删除container

执行命令删除 image

$ docker rmi gb-project/xxx-project