This plugin for Gradle adds the capability to build and publish Docker images from the build script. It is available through jCenter and MavenCentral.
See the change log for information about the latest changes.
The gradle-docker plugin adds a task distDocker
if the project already has the application plugin applied:
apply plugin: 'application'
apply plugin: 'docker'
Executing the distDocker
task builds a docker image containing all application files (libs, scripts, etc.) created by the distTar
task from the application plugin. If you already use the application plugin to package your project then the docker plugin will add simple docker image building to your project.
By default distDocker
uses a base image with a Java runtime according to the project's targetCompatibility
property. The docker image entry point is set to the start script created by the application plugin. Checkout the application example project.
Note: The creation of the convention task distDocker
is currently only supported for JVM based application projects. If you are not using a JVM based application, use the task type Docker
directly to create a task to build Docker images of your application.
Docker
taskThe docker plugin introduces the task type Docker
. A task of this type can be used to build and publish Docker images. See the Dockerfile documentation for information about how Docker images are built.
In the following example we build a Docker image in our Gradle build script for the popular reverse proxy nginx. The image will be tagged with the name foo/nginx
. The example is taken from the official Dockerfile examples:
apply plugin: 'docker'
buildscript {
repositories { jcenter() }
dependencies {
classpath 'se.transmode.gradle:gradle-docker:1.2'
}
}
group = "foo"
docker {
baseImage "ubuntu"
maintainer 'Guillaume J. Charmes "guillaume@dotcloud.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"
}
In the example above the instructions on how to build the nginx Docker image are configured inline using methods of the Docker Gradle task. During task execution the plugin first creates a Dockerfile which it then passes to Docker to build the image.
The available instructions are:
Dockerfile instruction | Gradle task method |
---|---|
ADD |
addFile(Closure copySpec) |
addFile(String source, String dest) |
|
addFile(File source, String dest) |
|
CMD |
defaultCommand(List cmd) |
ENTRYPOINT |
entryPoint(List entryPoint) |
ENV |
setEnvironment(String key, String val) |
EXPOSE |
exposePort(Integer port) |
exposePort(String port) |
|
RUN |
runCommand(String cmd) |
USER |
switchUser(String userNameOrUid) |
VOLUME |
volume(String... paths) |
WORKDIR |
workingDir(String dir) |
Instead of defining the build instructions inline in the task it is also possible to supply an external Dockerfile. If the task property dockerfile
is set to the path of an existing Dockerfile the plugin will use this file instead to build the image.
You can even combine these two methods: Supplying an external Dockerfile and extending it by defining instructions in the task. The build instructions from the external Dockerfile are read first and the instructions defined in the task appended. If an external Dockerfile is supplied, the baseImage
property is ignored.
The plugin exposes configuration options on 2 levels: globally through a plugin extension and on a per task basis. The plugin tries to always set sensible defaults for all properties.
Configuration properties in the plugin extension docker
are applied to all Docker tasks. Available properties are:
dockerBinary
- The path to the docker binary.baseImage
- The base docker image used when building images (i.e. the name after FROM
in the Dockerfile).maintainer
- The name and email address of the image maintainer.registry
- The hostname and port of the Docker image registry unless the Docker Hub Registry is used.useApi
- Use the Docker Remote API instead of a locally installed docker
binary. See belowExample to set the base docker image and maintainer name for all tasks:
docker {
maintainer = 'John Doe <john.doe@acme.org>'
baseImage = 'johndoe/nextgenjdk:9.0'
}
All properties that are exposed through the plugin extension can be overridden in each task.The image tag is constructed according to:
tag = "${project.group}/${applicationName}:${tagVersion}"
Where:
project.group
- This is a standard Gradle project property. If not defined, the {project.group}/
is omitted.applicationName
- The name of the application being "dockerized".tagVersion
- Optional version name added to the image tag name. Defaults to project.version
or "latest" if project.version
is unspecified.The following example task will tag the docker image as org.acme/bar:13.0
:
...
group = 'org.acme'
...
task fooDocker(type: Docker) {
applicationName = 'foobar'
tagVersion = '13.0'
}
If no base image is configured through the extension or task property a suitable image is chosen based on the project's targetCompatibility
. A project targeting Java 7 will for instance get a default base image with a Java 7 runtime.
By default the plug-in will use the docker
command line tool to execute any docker commands (such as build
and push
). However, it can be configured to use the Docker Remote API instead via the useApi
extension property:
docker {
useApi true
}
Use of the remote API requires that the Docker server be configured to listen over HTTP and that it have support for version 1.11 of the API (connecting over Unix Domain sockets is not supported yet). The following configuration options are available:
hostUrl
- set the URL used to contact the Docker server. Defaults to http://localhost:2375
apiUsername
- set the username used to authenticate the user with the Docker server. Defaults to nil
which means no authentication is performed.apiPassword
- set the password used to authenticate the user with the Docker server.apiEmail
- set the user's email used to authenticate the user with the Docker server.For example:
docker {
useApi true
hostUrl 'http://myserver:4243'
apiUsername 'user'
apiPassword 'password'
apiEmail 'me@mycompany.com'
}
The plugin is built with Gradle 2.x and thus needs version 2.0 or higher to work due to a newer version of Groovy included in Gradle 2.x (2.3 vs. 1.8.6). To use the plugin with Gradle 1.x you have to add Groovy's upward compatibility patch by adding the following line to your build file:
buildscript {
// ...
dependencies {
classpath 'se.transmode.gradle:gradle-docker:1.2'
classpath 'org.codehaus.groovy:groovy-backports-compat23:2.3.5'
}
}
If you are not using Docker's remote API (useApi = false
, i.e. the default behaviour) you need to have Docker installed locally in order to build images. However if the dryRun
task property is set to true
all calls to Docker are disabled. In that case only the Dockerfile and its context directory will be created.
1.父级build.gradle 注:gradle-docker-plugin下载比较缓慢,可以从中央仓库下载下来之后传到本地私服 buildscript { ext { springBootVersion = '2.2.1.RELEASE' } repositories { maven { url = "htt
Gradle有众多插件,而与Docker相关的插件也不止一个,这里应用的是bmuschko的Docker插件 好处:用Gradle集成Docker,不用分开维护工程名称、版本号等其他信息,避免不必要的麻烦。而且构建、创建镜像、推送一气呵成。 官方文档 https://bmuschko.github.io/gradle-docker-plugin/ 首先Gradle需要5.2以上版本。 其中有3个插
如果您使用的是Docker和Java,则可能要做的一件事是从构建工具( Maven或Gradle )中的Dockerfile中构建映像。 在这篇文章中,我将向您展示在两种情况下该如何做。 我将假定您具有实际的项目布局,在项目的根目录中具有Dockerfile文件。 马文 有几个Maven插件可用于在Maven中构建Docker映像,但最常用的插件之一是fabric8-maven-plugin 。
首先将最新版本的web3j安装到项目中。 Gradle Java 8: compile ('org.web3j:core:3.4.0') Android: compile ('org.web3j:core:3.3.1-android')
Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。 当前其支持的语言限于 Java、Groovy 和 Scala,计划未来将支持更多的语言。 usePlugin 'groovy'repositories {
gradle-docker-compose-plugin Simplifies usage of Docker Compose for local development and integration testing in Gradle environment. composeUp task starts the application and waits till all containers
Gradle 的核心为真实世界提供了很少的自动化. 所有的实用特性,类似编译java源码的能力, 是由插件提供的. 插件添加了新的任务(如:JavaCompile),域对象(如:SourceSet),公约(如:Java资源位置是src/main/java)以及来自其他插件延伸核心对象和对象。 在本章中,我们将讨论如何使用插件和关于插件的周边概念和术语。
13.3 Gradle Gradle用户可以直接在其dependencies部分导入“启动器”。与Maven不同,没有“超级父”可导入来共享配置。 repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web:1.5.7.RELEASE") }
Gradle Doctor The right prescription for your Gradle build. Documentation is at runningcode.github.io/gradle-doctor