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