构建方式分别使用了两个包下的插件: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生成,并且推送到镜像仓库)
---------(先写这么多,后面抽空再写)