Все еще развертываете приложения SpringBoot вручную? Попробуйте этот плагин автоматизации!

Spring Boot Java
Все еще развертываете приложения SpringBoot вручную? Попробуйте этот плагин автоматизации!

Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…

Резюме

Недавно я нашел полезный плагин Maven, созданный Fabric8io.docker-maven-plugin, вы можете легко развернуть приложение SpringBoot в контейнере Docker. Этот подключаемый модуль может выполнять ряд операций, таких как упаковка зеркал, отправка на зеркальные склады и запуск приложений. В этой статье мы подробно расскажем о его использовании, чтобы помочь всем!

Установите приватные зеркальные репозитории

Поскольку позже нам нужно отправить данные в частный репозиторий образов, мы предварительно установили его и использовали реестр частного репозитория образов, разработанный Docker.

  • Загрузите Docker-образ реестра;
docker pull registry:2
  • Чтобы запустить службу реестра с контейнером Docker, вам нужно добавить переменные средыREGISTRY_STORAGE_DELETE_ENABLED=trueВключить функцию удаления зеркал;
docker run -p 5000:5000 --name registry2 \
--restart=always \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry:2
  • Измените файл конфигурации Docker Daemon, расположение файла/etc/docker/daemon.json, поскольку Docker по умолчанию использует HTTPS для отправки изображений, а наш репозиторий образов не поддерживает его, вам необходимо добавить следующую конфигурацию, чтобы вместо этого использовать HTTP push;
{
  "insecure-registries": ["192.168.3.101:5000"]
}
  • Наконец, используйте следующую команду, чтобы перезапустить службу Docker.
systemctl daemon-reload && systemctl restart docker

Визуализация зеркального склада

Поскольку управление частным хранилищем изображений более проблематично, иdocker-registry-uiСуществует специальная страница для простого управления изображениями, поэтому мы устанавливаем ее для управления частными репозиториями изображений.

  • скачатьdocker-registry-uiобраз докера;
docker pull joxit/docker-registry-ui:static
  • Запуск с контейнером Dockerdocker-registry-uiСлужить;
docker run -p 8280:80 --name registry-ui \
--link registry2:registry2 \
-e REGISTRY_URL="http://registry2:5000" \
-e DELETE_IMAGES="true" \
-e REGISTRY_TITLE="Registry2" \
-d joxit/docker-registry-ui:static
  • Давайте сначала попробуем посмотреть, доступен ли частный репозиторий изображений, сначала загрузите тестовый образ.busybox;
docker pull busybox
  • дать зеркалоbusyboxПометьте частный репозиторий и установите версиюv1.0;
docker tag busybox 192.168.3.101:5000/busybox:v1.0
  • Затем отправьте его в репозиторий частного зеркала;
docker push 192.168.3.101:5000/busybox:v1.0
  • доступdocker-registry-uiинтерфейс управления, вы можете просмотретьbusyboxзеркало, адрес:http://192.168.3.101:8280

использование плагина

от Fabric8iodocker-maven-pluginЭто подключаемый модуль, который объединяет управление образами Docker и управление контейнерами. Мы можем развернуть наше приложение SpringBoot в контейнере Docker одним касанием пальца. Он очень прост в использовании. Давайте поговорим о его использовании.

Правильное использование плагина Maven в IDEA

  • Как правило, если мы не используем IDEA, мы будем выполнять команду Maven вручную, в IDEA нам нужно только дважды щелкнуть команду Maven на правой панели, чтобы выполнить ее, что очень удобно.

  • Если вы хотите использовать пользовательскую команду, вы можете использоватьExecute Maven GoalЭта функция, здесь я используюmvn clean packageЗаказ.

построить образ

  • использоватьdocker-maven-plugin, должен быть вpom.xmlДобавьте плагин в;
<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>
  • Прежде чем мы соберем образ, нам нужно сначала упаковать проект, а затем собрать его, иначе будет ошибка, просто используйте следующую команду напрямую;
mvn package docker:build
  • После завершения упаковки вы можете увидеть изображение на нашем сервере;
[root@linux-local mydata]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
192.168.3.101:5000/mall-tiny/mall-tiny-fabric   0.0.1-SNAPSHOT      6b8bc6faeb0b        9 seconds ago       680MB
  • Конечно, мы также можем использоватьpackageПри команде упакуйте образ напрямую и измените егоpom.xml,существует<plugin>добавить под узел<executions>можно настроить;
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.33.0</version>
    <executions>
        <!--如果想在项目打包时构建镜像添加-->
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • При использовании разных плагинов Maven для сборки образов Docker методы часто различаются.DockerfileЛучше бы собирали, сначала пишем 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
  • затем изменитьpom.xmlфайл, будет<build>Замените конфигурацию узла следующим содержимым, вам нужно только настроить каталог, в котором находится Dockerfile.
<build>
     <dockerFileDir>${project.basedir}</dockerFileDir>
</build>

Отправить в зеркальный репозиторий

  • Далее мы используемdocker:pushКоманда может отправить образ в частный репозиторий образов;
mvn docker:push
  • После этого вы сможете увидеть зеркало в нашем приватном репозитории зеркал;

Управление контейнером

  • docker-maven-pluginВы можете работать не только с изображениями, но и с контейнерами.Например, мы использовали следующие команды Docker для запуска контейнеров;
docker run -p 8080:8080 --name mall-tiny-fabric \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-fabric/logs:/var/logs \
-d 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT
  • Теперь нам просто нужно настроить его в плагине, в<image>добавить под узел<run>Узлы могут определять поведение запуска контейнера:
<!--定义容器启动行为-->
<run>
    <!--设置容器名,可采用通配符-->
    <containerNamePattern>${project.artifactId}</containerNamePattern>
    <!--设置端口映射-->
    <ports>
        <port>8080:8080</port>
    </ports>
    <!--设置容器间连接-->
    <links>
        <link>mysql:db</link>
    </links>
    <!--设置容器和宿主机目录挂载-->
    <volumes>
        <bind>
            <volume>/etc/localtime:/etc/localtime</volume>
            <volume>/mydata/app/${project.artifactId}/logs:/var/logs</volume>
        </bind>
    </volumes>
</run>
  • использовать сразу послеdocker:startкоманда может быть запущена;
mvn docker:start
[root@linux-local mydata]# docker ps
CONTAINER ID        IMAGE                                                         COMMAND                  CREATED             STATUS              PORTS                                            NAMES
95ce77c0394b        192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT   "java -jar /mall-tin…"   32 seconds ago      Up 31 seconds       0.0.0.0:8080->8080/tcp                           mall-tiny-fabric
  • остановить использование контейнераdocker:stopкоманда;
mvn docker:stop
  • удалить использование контейнераdocker:removeКомандовать, не очень удобно!
mvn docker:remove

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Записано, приветствую всех на Star!