
gradle-docker 安装与配置全攻略buildscript 依赖引入到插件扩展项详解【免费下载链接】gradle-dockerA Gradle plugin to build Docker images from the build script.项目地址: https://gitcode.com/gh_mirrors/gra/gradle-dockergradle-docker 是一款专门用于在 Gradle 构建脚本中直接构建 Docker 镜像的插件它把 Dockerfile 的编写、镜像构建与发布全部收纳进 Gradle 任务体系让「写构建脚本的同时产出可交付的 Docker 镜像」成为可能。本文面向新手从 buildscript 依赖引入讲起逐一拆解 gradle-docker 插件扩展项docker 扩展与任务级配置帮助你用最短路径完成安装与配置。什么是 gradle-docker在构建脚本里生成 Docker 镜像的 Gradle 插件在传统流程里我们往往要单独维护一个 Dockerfile再手动执行docker build命令镜像版本、标签等信息与构建脚本相互割裂。gradle-docker 的出现解决了这个痛点它提供了任务类型Docker让你直接在build.gradle里用 Groovy 语法描述 Dockerfile 指令如runCommand、addFile、exposePort等执行任务时插件会先自动生成 Dockerfile再交给 Docker 构建出镜像。核心逻辑可参考 DockerTask.groovy 与 Dockerfile.groovy。gradle-docker 安装buildscript 依赖引入只需 2 步gradle-docker 的安装方式非常标准关键在于在build.gradle顶部正确引入 buildscript 依赖。步骤如下在buildscript块中声明仓库与 classpath 依赖在插件块中应用docker插件。buildscript { repositories { jcenter() } dependencies { classpath se.transmode.gradle:gradle-docker:1.2 } } apply plugin: docker需要注意的是gradle-docker 基于 Gradle 2.x 构建请确保你的 Gradle 版本在 2.0 以上同时本机需安装 Docker 0.11 及以上版本若使用远程 API 模式则无需本机 Docker详见下文。一行代码应用 gradle-docker 插件最简单的配置方法如果你只是想快速体验应用插件的动作其实只有一行apply plugin: docker。执行后插件会为你注册两类任务类型Docker用于构建并发布镜像DockerRun用于运行容器。这些注册动作可以在 DockerPlugin.groovy 的apply方法中看到。若你的项目已应用 Gradle 官方application插件gradle-docker 还会自动追加一个约定任务distDocker一键把应用打包成镜像这部分我们稍后单独讲解。gradle-docker 插件扩展项详解全局配置 docker 扩展gradle-docker 的配置分为「全局」与「任务级」两层插件扩展项docker负责全局默认值作用于所有 Docker 任务每个任务内部又可单独覆盖。扩展项定义见 DockerPluginExtension.groovy主要属性如下插件扩展项属性作用说明baseImage基础镜像名称即 Dockerfile 中FROM后面的内容maintainer镜像维护者姓名与邮箱registry镜像仓库地址不使用 Docker Hub 时填写dockerBinarydocker 可执行文件的路径useApi是否改用 Docker 远程 API 替代本机 docker 命令hostUrl远程 Docker 服务地址默认http://localhost:2375apiUsername/apiPassword/apiEmail远程 API 认证信息一个典型的全局配置示例docker { maintainer John Doe john.doeacme.org baseImage johndoe/nextgenjdk:9.0 useApi true hostUrl http://myserver:4243 }值得留意的是若baseImage未显式设置插件会根据项目的targetCompatibility自动挑选带对应 Java 运行时的基础镜像这一默认逻辑在 DockerTask.groovy 的getBaseImage()方法中实现对 Java 项目非常友好。任务级配置灵活覆盖插件扩展项的最佳实践全局扩展项适合统一基线而具体任务往往需要差异化配置此时可在任务内覆盖同名属性。镜像标签的生成规则为tag ${project.group}/${applicationName}:${tagVersion}其中project.group未设置时前缀省略tagVersion缺省时取project.version若版本未指定则回退为latest。例如下面的任务会生成镜像org.acme/bar:13.0group org.acme task fooDocker(type: Docker) { applicationName foobar tagVersion 13.0 }快速上手示例用 gradle-docker 构建一个 nginx 镜像下面是一个完整的可运行示例它使用Docker任务类型以内联方式编写 Dockerfile 指令构建一个 nginx 镜像并命名为foo/nginxapply plugin: docker buildscript { repositories { jcenter() } dependencies { classpath se.transmode.gradle:gradle-docker:1.2 } } group foo docker { baseImage ubuntu maintainer Guillaume J. Charmes guillaumedotcloud.com } task nginxDocker(type: Docker) { applicationName nginx runCommand echo deb http://archive.ubuntu.com/ubuntu precise main universe /etc/apt/sources.list runCommand apt-get update runCommand apt-get install -y inotify-tools nginx apache2 openssh-server }执行./gradlew nginxDocker即可完成构建。gradle-docker 支持的 Dockerfile 指令与 Gradle 方法映射完整清单如下Dockerfile 指令Gradle 任务方法ADDaddFile(Closure copySpec)/addFile(String source, String dest)CMDdefaultCommand(List cmd)ENTRYPOINTentryPoint(List entryPoint)ENVsetEnvironment(String key, String val)EXPOSEexposePort(Integer/String port)RUNrunCommand(String cmd)USERswitchUser(String userNameOrUid)VOLUMEvolume(String... paths)WORKDIRworkingDir(String dir)此外插件还支持直接指定外部 Dockerfile通过dockerfile属性甚至可以把外部 Dockerfile 与内联指令混合使用——外部文件的内容会先被读取任务内定义的指令随后追加若提供了外部 DockerfilebaseImage将被忽略。示例可参考 examples/simple/ 与其中的 Dockerfile.expected。结合 application 插件distDocker 一键打包 JVM 应用如果你正在开发 JVM 应用gradle-docker 与 Gradleapplication插件的组合堪称绝配。只需同时应用两个插件apply plugin: application apply plugin: docker然后执行./gradlew distDocker插件就会把distTar生成的启动脚本、依赖库等全部打包进镜像并自动将入口点设置为应用启动脚本一条命令产出可运行镜像。完整可运行示例见 examples/application/其入口类为 JettyMain.java。总结从 buildscript 依赖到插件扩展项的一站式配置回顾全文gradle-docker 的安装配置可以浓缩为三句话在buildscript块中引入 gradle-docker 依赖用apply plugin: docker应用插件通过插件扩展项docker配置全局默认值、在任务内按需覆盖。无论是内联编写 Dockerfile、加载外部 Dockerfile还是借助distDocker一键打包应用gradle-docker 都能让 Docker 镜像构建彻底融入 Gradle 构建体系值得每一位使用 Gradle 的开发者尝试。【免费下载链接】gradle-dockerA Gradle plugin to build Docker images from the build script.项目地址: https://gitcode.com/gh_mirrors/gra/gradle-docker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考