Статьи

Jib — Создание образа докера для приложения Spring Boot

Я был приятно удивлен тем, как легко было создать образ докера для примера приложения Spring Boot с использованием Jib .

Позвольте мне сначала сравнить Jib с подходом, который я использовал раньше.

Я создавал образы докеров, используя отличный плагин bmuschko . При наличии доступа к демону Docker и основанному на dsl описании Dockerfile или прямого Dockerfile он может создать образ Docker с помощью задачи Gradle. В моем случае задача создания образа Docker выглядит примерно так:

1
2
3
4
5
6
7
task createDockerImage(type: DockerBuildImage) {
    inputDir = file('.')
    dockerFile = project.file('docker/Dockerfile')
    tags = ['sample-micrometer-app:' + project.version]
}
 
createDockerImage.dependsOn build

и сам мой Dockerfile получен из базового образа «java: 8»:

1
2
FROM java:8
...

gradle-docker-plugin упростил создание образа докера прямо из gradle с той ловушкой, что плагину необходим доступ к демону docker для создания образа. Кроме того, поскольку базовое изображение «java: 8» большое, окончательное изображение докера оказывается на моей машине около 705 МБ. Опять же, не по вине плагина gradle-docker, но по моему выбору базового образа.

Теперь с Jib все, что мне нужно сделать, это добавить плагин :

1
2
3
plugins {
    id 'com.google.cloud.tools.jib' version '0.9.6'
}

Настройте его, чтобы дать изображению имя:

1
2
3
4
5
jib {
    to {
        image = "sample-micrometer-app:0.0.1-SNAPSHOT"
    }
}

И это все. Имея локальный демон docker, я могу создать свой образ docker, используя следующую задачу:

1
./gradlew jibDockerBuild

Jib автоматически выбирает очень легкое базовое изображение — мое новое изображение имеет размер около 150 МБ.

Если у меня был доступ к реестру докера, то локальный демон докера не требуется, он может напрямую создавать и публиковать образ в реестре докера!

Плагин Jib Gradle предоставляет интересную задачу — «jibExportDockerContext» для экспорта файла Docker, таким образом, если необходимо, можно запустить сборку Docker, используя этот Dockerfile, для моих целей я хотел увидеть содержимое этого файла, и это выглядит примерно так :

1
2
3
4
5
6
7
FROM gcr.io/distroless/java
 
COPY libs /app/libs/
COPY resources /app/resources/
COPY classes /app/classes/
 
ENTRYPOINT ["java","-cp","/app/libs/*:/app/resources/:/app/classes/","sample.meter.SampleServiceAppKt"]

В общем, очень приятный опыт, и Jib действительно оправдывает свои цели . Мой пример проекта с Jib, интегрированной со сборкой Gradle, доступен здесь .

См. Оригинальную статью здесь: Jib — Создание образа докера для приложения Spring Boot

Мнения, высказанные участниками Java Code Geeks, являются их собственными.