使用gradle构建springboot的docker镜像

构建方式分别使用了两个包下的插件:1.  se.transmode.gradle  2.com.bmuschko

但是第一种的最近更新还在2014年,所以我选择了第二种方式。

环境:IDEA、springboot2.0.5  gradle5.5 

第二种有两种构建方式:

https://bmuschko.github.io/gradle-docker-plugin/#spring-boot-plugin-extension 这是官方提供的开发文档

这是翻译之后的解释。三种插件中第一种有更多的自主性,第三种是更加简单,但是spring boot的版本必须是2.x的。

第三种方法使用:

插件的集成方式:

1.

plugins {
    id "com.bmuschko.docker-spring-boot-application" version "6.0.0"
    
}

2.

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.bmuschko:gradle-docker-plugin:6.0.0"
  }
}

apply plugin: "com.bmuschko.docker-spring-boot-application"

生成dockerfile的配置

docker {
    springBootApplication {
        baseImage = 'java:8' //指定运行镜像
        ports = [8086]  //暴露的端口
        镜像名称和版本
        images = ["${project.group}/${rootProject.name}:${project.version}"] 
        jvmArgs = ["-Dspring.profiles.active=$env", '-Xmx2048m']  //启动参数
    }
    //如果url不指定的话
    // Unix系统默认:unix:///var/run/docker.sock
    //Windows系统默认:tcp://127.0.0.1:2375。
    url = 'https://192.168.3.103:2375'  
}

构建镜像:

gradle dockerBuildImage 至此结束,构造容器需要另行(通过脚本或是手动运行容器创建命令)走docker的run命令。

第一种方法使用:该方法中可以自定义task任务,自由度高

https://bmuschko.com/blog/dockerized-spring-boot-app/  注意这个链接中的方法指定的插件版本是3.2.3

完整脚本是https://github.com/bmuschko/dockerized-spring-boot-app/blob/master/build.gradle

集成方式:

1.
buildscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:6.0.0'
    }
}

apply plugin: 'com.bmuschko.docker-remote-api'

2.
plugins {
    id 'com.bmuschko.docker-remote-api' version '6.0.0'
}

镜像构建方式一:(Dockerfile文件已经写好,镜像部署在本地)

assemble.doLast {
    ... 
    //拷贝Dockerfile和jar,docker使用
    copyDockerfile()
}

def copyDockerfile(){
    //拷贝Dockerfile到编译目录下
    File srcDir = file(buildDir)
    //编译目录
    File targetPath = file("${srcDir.getPath()}/docker/")
    if (!targetPath.exists()){
        targetPath.mkdirs()
    }
    //Dockerfile源文件
    def srcPath = "${srcDir.getParentFile()}/docker/Dockerfile"
    def destPath = "${srcDir.getAbsoluteFile()}/docker/Dockerfile"
    copyOverwriteFile(srcPath,destPath)
    //jar包源文件
    def jarSrcPath = "${srcDir.getAbsoluteFile()}/libs/backlog-new.jar"
    def jarDestPath = "${srcDir.getAbsoluteFile()}/docker/backlog-new.jar"
    copyOverwriteFile(jarSrcPath,jarDestPath)
}

// Use task types
task buildOwnDockerImage(type: DockerBuildImage,dependsOn:assemble) {
    dockerFile = file("build/docker/Dockerfile")
    inputDir = file("build/docker/")
    images.add('backlog-new:latest')

}

---------------------------------------------

以下转载自:https://www.cnblogs.com/sparkdev/p/9573248.html

注意:COPY 和 ADD 命令不能拷贝上下文之外的本地文件
            对于 COPY 和 ADD 命令来说,如果要把本地的文件拷贝到镜像中,那么本地的文件必须是在上下文目录中的文件。其实这一点很好解释,因为在执行 build 命令时,docker 客户端会把上下文中的所有文件发送给 docker daemon。考虑 docker 客户端和 docker daemon 不在同一台机器上的情况,build 命令只能从上下文中获取文件。如果我们在 Dockerfile 的 COPY 和 ADD 命令中引用了上下文中没有的文件,就会收到类似下面的错误:

 

---------------------------------------------

之后运行buildOwnDockerImage任务,在本地(我的是Windows10)docker容器中就会出现镜像了

镜像构建方式二:(Dockerfile文件由task生成,并且推送到镜像仓库)

---------(先写这么多,后面抽空再写)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值