Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Gradle Docker plugin

Join the chat at https://gitter.im/Transmode/gradle-docker

Build StatusCoverageDownload

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.

Extending the application plugin

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.

The Dockertask

The 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"
}

Building your Dockerfile

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 instructionGradle task method
ADDaddFile(Closure copySpec)
addFile(String source, String dest)
addFile(File source, String dest)
CMDdefaultCommand(List cmd)
ENTRYPOINTentryPoint(List entryPoint)
ENVsetEnvironment(String key, String val)
EXPOSEexposePort(Integer port)
exposePort(String port)
RUNrunCommand(String cmd)
USERswitchUser(String userNameOrUid)
VOLUMEvolume(String... paths)
WORKDIRworkingDir(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.

Configuring the plugin

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.

Global configuration through plugin extension 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 below

Example 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'
}

Task configuration through task properties

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'
}

A note about base images

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.

Docker Remote API

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'
}

Requirements

  • Gradle 2.x
  • Docker 0.11+

Note to Gradle 1.x users

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'
}
}

Note to native docker client users

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.

About

A Gradle plugin to build Docker images from the build script.

Topics

Resources

Stars

650 stars

Watchers

49 watching

Forks

Releases

Packages

Used by

Contributors

Languages