Springboot【2.x】+ Gradle远程部署到Linux的Docker

序言

缘由已在上章节讲述,本章就直接进入主题--基于springboot+Gradle项目远程部署到docker,希望能给大伙儿有些帮助。

系统及软件环境

  • Linux操作系统CentOS7(建议)
  • Docker(社区版)---官方地址

Docker RemoteApi

远程部署前提需要开启docker远程访问功能,下面介绍常用两个操作系统的配置

  • CentOS 6
    修改/etc/sysconfig/docker文件,重启后生效(service docker restart)
DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:2375"
  • CentOS 7
    修改/usr/lib/systemd/system/docker.service文件,在ExecStart后面添加一行
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

效果截图

dockerConfig

�重启服务�

  systemctl daemon-reload    
  systemctl restart docker.service 
  • 测试效果
    浏览器访问(http://192.168.80.200:2375/info)
dockerInfo

项目创建与访问

打开intelliJ -> New Project -> Spring Assistant(Spring Initializr Server) -> 选择gradle -> 工程名(gdhello) -> 点击完成,项目结构如下

gradleProject

在src/main/kotlin 相应目录下新建HelloController

@RestController
class HelloController {
    @GetMapping("hello")
    fun helloWorld() = "hello world"
}

在src/main/resource的application.properties里面添加自定义端口号

server.port=8889

启动项目,浏览器访问

~$ ./gradlew bootRun
bootBrower

配置DockerFile

确保项目能正常访问后,在src/main/docker文件夹下面,新建dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD gdhello-0.0.1.jar app.jar
# -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8889

配置Gradle中docker依赖

用intellij自动生成的gradle项目已经是5.6.x版本并且将原来的build.gradle替换成了build.gradle.kts(DSL脚本语言,如果不熟悉的童鞋,在文章末尾文献参考中有官方的学习资料,山姆本人对于DSL的认识也仅限于文档的部分内容),打开build.gradle.kts添加docker-remote-api插件

plugins {
    id("com.bmuschko.docker-remote-api") version "5.2.0"
}

docker {
    // 远程docker服务器地址(如果不设置,默认本地2375端口)
    url.set("tcp://192.168.80.200:2375")
}

到此,docker-remote-api最简单的配置已经完毕,但还不能像maven一样直接远程部署,还需要进行task任务的项目打包和docker远程部署

val copyJarToDocker by tasks.creating(Copy::class) {
    dependsOn(tasks.bootJar)
    from("build/libs")
    into("src/main/docker")
    include("${project.name}-${project.version}.jar")
}

val buildGradleDockerImage by tasks.creating(DockerBuildImage::class) {
    dependsOn(copyJarToDocker)
    inputDir.set(file("src/main/docker"))
    tags.add("${project.name}:0.0.1")
}

保存后,执行以下命令

~$ ./gradlew buildGradleDockerImage
dockerSuccess

看到执行成功后,远程登录80.200的服务,看下docker镜像

dockerImages

小思考

  • 学有余力的童鞋,可以思考下为了保证生产环境的安全性,如何创建docker的授权登录机制?
  • 如何利用gradle-docker-plugin这个插件,通过gradle task来自动创建docker容器,并在创建后自动运行容器,结束后自动销毁容器,并能监听容器日志?

欢迎有兴趣的童鞋跟山姆留言,大家一起讨论,一起学习,一起进步_

文献参考

【demo地址】(https://github.com/lenvonsam/mvhello.git)
【docker官网】(https://docs.docker.com)
【docker介绍】(https://www.cnblogs.com/boshen-hzb/p/6400272.html)
【kotlin介绍】(https://www.runoob.com/kotlin/kotlin-tutorial.html)
【gradle(DSL)】(https://docs.gradle.org/current/dsl/)
【gradle-docker-plugin文档】(https://bmuschko.github.io/gradle-docker-plugin/)

你可能感兴趣的:(Springboot【2.x】+ Gradle远程部署到Linux的Docker)