Я был приятно удивлен тем, как легко было создать образ докера для примера приложения 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/javaCOPY 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, являются их собственными. |