Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…
Резюме
Чтобы упростить создание образов Docker для приложений SpringBoot, мы часто используем подключаемые модули Maven для упаковки образов. Раньше я использовал сторонние плагины, естьspotify
иfabric8
два видаdocker-maven-plugin
. Недавно вышел SpringBoot 2.4.0, а в официальном плагине так же добавлена поддержка Docker.После открытия тоже очень пригодится.Всем рекомендую!
Использование сторонних плагинов
Давайте сначала разберемся в использовании сторонних плагинов, что удобно для сравнения с официальными плагинами.
fabric8
Подробнее об использовании плагина см.«Все еще развертываете приложения SpringBoot вручную? Попробуйте этот плагин автоматизации! 》.
- Стоит отметить, что когда мы используем плагины, нам нужно самим определить процесс построения изображения, например, в
pom.xml
Используйте следующую конфигурацию,<images>
Конфигурация под меткой — это конфигурация процесса сборки образа;
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<!-- Docker 远程管理地址-->
<dockerHost>http://192.168.3.101:2375</dockerHost>
<!-- Docker 推送镜像仓库地址-->
<pushRegistry>http://192.168.3.101:5000</pushRegistry>
<images>
<image>
<!--由于推送到私有镜像仓库,镜像名需要添加仓库地址-->
<name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}</name>
<!--定义镜像构建行为-->
<build>
<!--定义基础镜像-->
<from>java:8</from>
<args>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</args>
<!--定义哪些文件拷贝到容器中-->
<assembly>
<!--定义拷贝到容器的目录-->
<targetDir>/</targetDir>
<!--只拷贝生成的jar包-->
<descriptorRef>artifact</descriptorRef>
</assembly>
<!--定义容器启动命令-->
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
<!--定义维护者-->
<maintainer>macrozheng</maintainer>
</build>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
- Или сначала определите процесс сборки образа в файле Dockerfile;
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前maven目录生成的文件复制到docker容器的/目录下
COPY maven /
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER macrozheng
- Затем сошлитесь на файл Dockerfile в плагине, чтобы создать образ;
<build>
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
- На самом деле, для приложений SpringBoot процесс создания образа Docker из пакета Jar приложения в основном одинаков.Почему вы должны сами определять процесс создания образа?
Использование официальных плагинов
Официальный плагин SpringBoot решает вышеуказанные проблемы, не очень удобно собирать образ Docker напрямую, не написав процесс сборки образа Docker самостоятельно! Далее, давайте испытаем его силу!
- Поскольку нам нужно отправить образ в репозиторий образов, сначала мы устанавливаем приватный репозиторий образов.
Registry
и инструменты управления визуальными изображениямиdocker-registry-ui
, вы можете обратиться к«Все еще развертываете приложения SpringBoot вручную? Попробуйте этот плагин автоматизации! 》;
[root@linux-local ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ffec08467ac joxit/docker-registry-ui:static "/bin/sh -c entrypoi…" 2 hours ago Up 2 hours 0.0.0.0:8280->80/tcp registry-ui
a809535ee2a2 registry:2 "/entrypoint.sh /etc…" 3 months ago Up 7 hours 0.0.0.0:5000->5000/tcp registry2
- Затем нам нужно обновить версию приложения до SpringBoot 2.4.0, предыдущая версия поддержки Docker не имеет этого совершенства;
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- затем изменить
pom.xml
файл для настройки официального плагина Maven, в основном для настройки функций, связанных с Docker;
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<!--配置镜像名称-->
<name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}</name>
<!--镜像打包完成后自动推送到镜像仓库-->
<publish>true</publish>
</image>
<docker>
<!--Docker远程管理地址-->
<host>http://192.168.3.101:2375</host>
<!--不使用TLS访问-->
<tlsVerify>false</tlsVerify>
<!--Docker推送镜像仓库配置-->
<publishRegistry>
<!--推送镜像仓库用户名-->
<username>test</username>
<!--推送镜像仓库密码-->
<password>test</password>
<!--推送镜像仓库地址-->
<url>http://192.168.3.101:5000</url>
</publishRegistry>
</docker>
</configuration>
</plugin>
- Если вы используете IDEA, дважды щелкните плагин SpringBoot напрямую.
build-image
Команду можно упаковать и отправить на зеркальный склад одним щелчком мыши;
- Вы также можете использовать следующие команды Maven в командной строке для упаковки и сборки образов;
mvn spring-boot:build-image
- Процесс построения образа выведет следующую информацию. Поскольку многие зависимости будут загружены с Github, загрузка не удастся, если сеть не в порядке. Просто попробуйте еще несколько раз:
[INFO] > Pulling builder image 'docker.io/paketobuildpacks/builder:base' 100%
[INFO] > Pulled builder image 'paketobuildpacks/builder@sha256:9d377230ba8ee74d8619178fd318b1b87a7da1a88bdb198afd14dd7de9e8ea6a'
[INFO] > Pulling run image 'docker.io/paketobuildpacks/run:base-cnb' 100%
[INFO] > Pulled run image 'paketobuildpacks/run@sha256:33d37fc9ba16e220f071805eaeed881a508ceee5c8909db5710aaed7e97e4fc2'
[INFO] > Executing lifecycle version v0.9.3
[INFO] > Using build cache volume 'pack-cache-5641f846df6.build'
[INFO]
[INFO] > Running creator
[INFO] [creator] ===> DETECTING
[INFO] [creator] 5 of 18 buildpacks participating
[INFO] [creator] paketo-buildpacks/ca-certificates 1.0.1
[INFO] [creator] paketo-buildpacks/bellsoft-liberica 5.2.1
[INFO] [creator] paketo-buildpacks/executable-jar 3.1.3
[INFO] [creator] paketo-buildpacks/dist-zip 2.2.2
[INFO] [creator] paketo-buildpacks/spring-boot 3.5.0
[INFO] [creator] ===> ANALYZING
[INFO] [creator] Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:helper" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jvmkill" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/executable-jar:class-path" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
[INFO] [creator] Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
[INFO] [creator] ===> RESTORING
[INFO] [creator] ===> BUILDING
[INFO] [creator]
[INFO] [creator] Paketo CA Certificates Buildpack 1.0.1
[INFO] [creator] https://github.com/paketo-buildpacks/ca-certificates
[INFO] [creator] Launch Helper: Reusing cached layer
[INFO] [creator]
[INFO] [creator] Paketo BellSoft Liberica Buildpack 5.2.1
[INFO] [creator] https://github.com/paketo-buildpacks/bellsoft-liberica
[INFO] [creator] Build Configuration:
[INFO] [creator] $BP_JVM_VERSION 8.* the Java version
[INFO] [creator] Launch Configuration:
[INFO] [creator] $BPL_JVM_HEAD_ROOM 0 the headroom in memory calculation
[INFO] [creator] $BPL_JVM_LOADED_CLASS_COUNT 35% of classes the number of loaded classes in memory calculation
[INFO] [creator] $BPL_JVM_THREAD_COUNT 250 the number of threads in memory calculation
[INFO] [creator] $JAVA_TOOL_OPTIONS the JVM launch flags
[INFO] [creator] BellSoft Liberica JRE 8.0.275: Reusing cached layer
[INFO] [creator] Launch Helper: Reusing cached layer
[INFO] [creator] JVMKill Agent 1.16.0: Reusing cached layer
[INFO] [creator] Java Security Properties: Reusing cached layer
[INFO] [creator]
[INFO] [creator] Paketo Executable JAR Buildpack 3.1.3
[INFO] [creator] https://github.com/paketo-buildpacks/executable-jar
[INFO] [creator] Process types:
[INFO] [creator] executable-jar: java org.springframework.boot.loader.JarLauncher
[INFO] [creator] task: java org.springframework.boot.loader.JarLauncher
[INFO] [creator] web: java org.springframework.boot.loader.JarLauncher
[INFO] [creator]
[INFO] [creator] Paketo Spring Boot Buildpack 3.5.0
[INFO] [creator] https://github.com/paketo-buildpacks/spring-boot
[INFO] [creator] Creating slices from layers index
[INFO] [creator] dependencies
[INFO] [creator] spring-boot-loader
[INFO] [creator] snapshot-dependencies
[INFO] [creator] application
[INFO] [creator] Launch Helper: Reusing cached layer
[INFO] [creator] Web Application Type: Contributing to layer
[INFO] [creator] Servlet web application detected
[INFO] [creator] Writing env.launch/BPL_JVM_THREAD_COUNT.default
[INFO] [creator] Spring Cloud Bindings 1.7.0: Reusing cached layer
[INFO] [creator] 4 application slices
[INFO] [creator] Image labels:
[INFO] [creator] org.opencontainers.image.title
[INFO] [creator] org.opencontainers.image.version
[INFO] [creator] org.springframework.boot.spring-configuration-metadata.json
[INFO] [creator] org.springframework.boot.version
[INFO] [creator] ===> EXPORTING
[INFO] [creator] Reusing layer 'paketo-buildpacks/ca-certificates:helper'
[INFO] [creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:helper'
[INFO] [creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[INFO] [creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
[INFO] [creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
[INFO] [creator] Reusing layer 'paketo-buildpacks/executable-jar:class-path'
[INFO] [creator] Reusing layer 'paketo-buildpacks/spring-boot:helper'
[INFO] [creator] Reusing layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
[INFO] [creator] Reusing layer 'paketo-buildpacks/spring-boot:web-application-type'
[INFO] [creator] Reusing 4/5 app layer(s)
[INFO] [creator] Adding 1/5 app layer(s)
[INFO] [creator] Reusing layer 'launcher'
[INFO] [creator] Reusing layer 'config'
[INFO] [creator] Reusing layer 'process-types'
[INFO] [creator] Adding label 'io.buildpacks.lifecycle.metadata'
[INFO] [creator] Adding label 'io.buildpacks.build.metadata'
[INFO] [creator] Adding label 'io.buildpacks.project.metadata'
[INFO] [creator] Adding label 'org.opencontainers.image.title'
[INFO] [creator] Adding label 'org.opencontainers.image.version'
[INFO] [creator] Adding label 'org.springframework.boot.spring-configuration-metadata.json'
[INFO] [creator] Adding label 'org.springframework.boot.version'
[INFO] [creator] Setting default process type 'web'
[INFO] [creator] *** Images (d5e1771dac7b):
[INFO] [creator] 192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT
[INFO]
[INFO] Successfully built image '192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT'
[INFO]
[INFO] > Pushed image '192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT'
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:06 min
[INFO] Finished at: 2020-11-27T15:07:46+08:00
[INFO] Final Memory: 37M/359M
[INFO] ------------------------------------------------------------------------
- После успешной сборки образа мы можем просмотреть наш образ из репозитория образов:
[root@linux-local ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
paketobuildpacks/run base-cnb a717358311fc 9 days ago 87.2MB
java 8 d23bdf5b1b1b 3 years ago 643MB
192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin 0.0.1-SNAPSHOT d5e1771dac7b 40 years ago 244MB
pack.local/builder/fewqajyqsc latest f15fad05a5ba 40 years ago 558MB
pack.local/builder/kirivtcqtu latest f15fad05a5ba 40 years ago 558MB
paketobuildpacks/builder base 511452064e06 40 years ago 558MB
- мы можем начать с
Docker Registry UI
Посмотреть зеркало на зеркальном складе можно по адресу:http://192.168.3.101:8280/
- Затем запустите наше приложение SpringBoot с помощью следующей команды:
docker run -p 8080:8080 --name mall-tiny-docker-plugin \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-docker-plugin/logs:/var/logs \
-d 192.168.3.101:5000/mall-tiny/mall-tiny-docker-plugin:0.0.1-SNAPSHOT
- После успешного запуска вы можете успешно получить доступ к странице Swagger приложения SpringBoot и адресу доступа:http://192.168.3.101:8080/swagger-ui.html
Суммировать
Официальный подключаемый модуль Maven для SpringBoot позволяет избежать написания процесса сборки образа Docker и в полной мере использует технологию многоуровневого хранения Jar после SpringBoot 2.3, но вызывает некоторые проблемы в сценариях, требующих пользовательских образов сборки.
использованная литература
Официальная документация:docs.spring.IO/весенняя загрузка…
Адрес исходного кода проекта
Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!