предисловие
Обычно мы используемDockerfile
построить проектDocker
зеркало. Но также использоватьgradle
При компиляции проекта отдайте образПостроитьизагрузитьтребование. В этой статье объясняется, как использоватьgradle
написать и настроитьDockerfile
и генерироватьзеркало.
Статьи из этой серии
- Actual Spring Boot 2.0 Series (1) — Создание образов Docker с помощью Gradle
- Actual Spring Boot 2.0 Series (2) — глобальная обработка исключений и тестирование
- Actual Spring Boot 2.0 Series (3) — Подробное объяснение асинхронных вызовов с использованием @Async
- Actual Spring Boot 2.0 Series (4) — Использование WebAsyncTask для обработки асинхронных задач
- Actual Spring Boot 2.0 Series (5) — прослушиватель, сервлет, фильтр и перехватчик
- Actual Spring Boot 2.0 Series (6) — несколько реализаций одномашинных задач синхронизации
текст
1. Создайте проект
использоватьSpring Initializer
Создаватьgradle
проектspring-boot-gradle-for-docker
, добавитьweb
полагаться. получить начальныйbuild.gradle
следующее:
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'io.ostenant.springboot.sample'
version = '1.0'
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
2. Настройте класс входа
Чтобы облегчить тестирование развертывания контейнера, вSpring Boot
Настройте контроллер в классе запуска, чтобы он реагировал на текущее системное время.
@RestController
@SpringBootApplication
public class Application {
private ThreadLocal<SimpleDateFormat> threadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"));
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/")
public String retrieveTime() {
return threadLocal.get().format(new Date());
}
}
3. Добавить плагин
использовать здесьgradle-docker
плагинреализоватьdocker
Сборка изображения. Таким образом, мы можем напрямуюGradle
настроить в скриптеDockerfile
достигатьпостроить образназначение функции.
gradle-docker
Плагин загружен наjCenter
иMavenCentral
начальство. Так что только вdependencies
добавить зависимостиse.transmode.gradle:gradle-docker:1.2
готовые к использованиюdocker
плагин.
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("se.transmode.gradle:gradle-docker:1.2")
}
}
4. Применить плагины
Добавьте следующий код вbuild.gradle
середина
apply plugin: 'application'
apply plugin: 'docker'
если добавленоapplication
Для плагинов по умолчаниюgradle-docker
Плагин добавитdistDocker
изgradle task
, построитьСодержит все файлы программыизdocker
зеркало.
5. Настройте информацию о сборке образа
5.1 Группа конфигурации
group = 'io.ostenant.springboot.sample'
5.2 Настройте имя образа и номер версии
jar {
baseName = "spring-boot-gradle-for-docker"
version = 1.0
}
из которых зеркальноtag
Состав по умолчанию:Название группы проекта/приложения: номер версии
tag = "${project.group}/${applicationName}:${tagVersion}"
-
проект.группа: стандартная
gradle
свойство, если оно не определено, плагин по умолчанию будет использоватьпропускать${project.group}
это свойство. -
applicationName: когда приложение контейнеризованоназвание.
-
tagVersion: необязательный атрибут, будет использоваться как зеркалоЭтикетка. По умолчанию
project.version
Если не указаноproject.version
, затем используйтеlatest
как маркер.
5.3 Настройка базовой информации о сборке докера
distDocker {
baseImage = "openjdk"
maintainer = "harrison"
}
в,baseImage
эквивалентноDockerfile
объявлено вFROM
. объявлено впостроить образоснован наImage
,maintainer
эквивалентноMAINTAINER
, заявляетзеркальный автор. если объявленоregistry
Адрес, плагинПосле создания зеркального изображенияможет быть автоматическиpush
на этот адрес. Другие конфигурации включаютdocker hub
изадрес,имя пользователяипароль.
Более подробные случаи конфигурации следующие:
docker {
baseImage 'openjdk'
maintainer 'harrison'
useApi true
hostUrl 'http://myserver:4243'
apiUsername 'user'
apiPassword 'password'
apiEmail 'me@mycompany.com'
}
6. Добавить задачу задачи
Базовая конфигурация завершена, нам также нужно добавитьtask
используется вgradle
при компиляцииВыполнить сборку изображения.
Плагин предоставляет некоторыеМетод преобразования, используется для обозначенияDockerfile
серединаграмматика ключевых словВ следующей таблице могут быть сияющими по требованию:
Ключевые слова Dockerfile | метод задачи градиента |
---|---|
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) |
Ниже представлен проектtaskBuilder
конфигурация задачи
task dockerBuilder(type: Docker) {
applicationName = jar.baseName
tagVersion = jar.version
volume('/tmp')
addFile("${jar.baseName}-${jar.version}.jar", "app.jar")
entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar'])
exposePort(8080)
doFirst {
copy {
from jar
into stageDir
}
}
}
После завершения сборки корневой каталог проектаbuild/docker
Папка появится нижеDockerfile
иspring-boot-gradle-for-docker-1.0.jar
документ. Среди них вышеперечисленныеtask
эквивалентно следующемуDockerfile
.
FROM aglover/java8-pier
VOLUME ["/tmp"]
ADD spring-boot-gradle-for-docker-1.0.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
EXPOSE 8080
если ты чувствуешьtask
написано наDockerfile
заменить скриптОчень неудобно, можно же прямо вtask
указано вDockfile
изПуть файла, напрямую используйте существующий файл для создания изображения:
task buildDocker(type: Docker) {
applicationName = jar.baseName
tagVersion = jar.version
dockerfile = file('Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
пройти черезfile()
уточнитьtask
Используйте расположенныйКорневой каталог проектаизDockerfile
производить зеркала.
7. Скомпилируйте и соберите образ Docker
Перейдите в корневой каталог проекта и запуститеgradle
команда для упаковки и сборки.
$ ./gradlew clean build dockerBuilder --info
gradle
будет работать первымЛокальный тест, Затем выполнитьУпаковка проекта, далее согласноdocker-gradle
плагинсборка изображения.
ждать, чтобы появитьсяBUILD SUCCESSFUL
Чтобы показать, что задача выполняется успешно. Это можно наблюдать по названию зеркала
io.ostenant.springboot.sample/spring-boot-gradle-for-docker:1.0
бегатьdocker images
Проверьте локальный образ, чтобы дополнительно убедиться, что образ был создан успешно.
нижеприведенныйbuild.gradle
полныйконфигурационный файл
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("se.transmode.gradle:gradle-docker:1.2")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'application'
apply plugin: 'docker'
group = 'io.ostenant.springboot.sample'
version = '1.0'
sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = "io.ostenant.springboot.sample.Application"
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
jar {
baseName 'spring-boot-gradle-for-docker'
version '1.0'
}
distDocker {
baseImage 'openjdk'
maintainer 'harrison'
}
task dockerBuilder(type: Docker) {
applicationName = jar.baseName
tagVersion = jar.version
volume('/tmp')
addFile("${jar.baseName}-${jar.version}.jar", "app.jar")
entryPoint(["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", 'app.jar'])
exposePort(8080)
doFirst {
copy {
from jar
into stageDir
}
}
}
8. Запускаем контейнер с образом
Выполните следующую команду, запустите контейнер в соответствии с зеркалом, выставленным8080
порт доступа.
$ docker run -d --name gradle-boot -p 8080:8080 io.ostenant.springboot.sample/spring-boot-gradle-for-docker:1.0
доступhttp://127.0.0.1:8080/
, страница выведет текущее системное время, как показано на рисунке:
резюме
gradle-docker
Плагин также обеспечивает настройкуАдрес зеркального складаКонфигурацияDocker Remote Api
иDocker Hub
Для другого использования вы можете обратиться к проектуGitHub
адрес для настройки с помощью:GitHub.com/транс режим/….
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.