Практика использования Docker-контейнера SpringBoot + приложение Dubbo

Spring Boot задняя часть Spring Docker Dubbo maven
Практика использования Docker-контейнера SpringBoot + приложение Dubbo

Оригинальный адрес:luoliangDSGA's blog
адрес блога:luoliangdsga.github.io
Добро пожаловать в перепечатку, пожалуйста, указывайте автора и источник, спасибо!

Практика использования Docker для контейнеризации приложений SpringBoot+Dubbo

Docker становится все более и более популярным в повседневной разработке.Многие проекты на серверной части необходимо контейнеризовать с помощью Docker.SpringBoot+Docker называется «родным облачным приложением», и приложение SpringBoot очень легко комбинировать с Docker. Однако совмещение Dubbo и Docker не так гладко, потому что Dubbo давно официально прекратил техническое обслуживание, а Dubbo официально начал активно поддерживать SpringBoot не так давно. Наступив на множество ям, я использовал этот блог, чтобы записать метод использования Docker для контейнеризации приложений Dubbo и забрать свой предыдущий SpringBoot + Dubboблог.

Проблема для решения

  • Поставщик Dubbo выполняет регистрацию службы в контейнере Docker, а зарегистрированный IP-адрес в zookeeper является IP-адресом контейнера, поэтому внешний потребитель Dubbo не может быть вызван.

Начинать

Нам нужно подготовить проект SpringBoot+Dubbo (проект, который я использовал непосредственно в своем последнем блоге), и Docker должен быть установлен локально.

  • Создайте новый Dockerfile
vi Dockerfile
  • Написать Dockerfile
FROM openjdk:8-jre-alpine

MAINTAINER luoliang

ADD target/dubbo-provider.jar app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/app.jar"]

EXPOSE 12345
  • построить образ
docker build -t dubbo-provider .
  • Запустите контейнер провайдера
docker run -d -p 12345:12345 --name dubbo-provider dubbo-provider
  • Просмотр журнала запуска контейнера

Вы можете увидеть текущий хост вывода журнала: 172.17.0.2.Этот IP-адрес является IP-адресом в контейнере.В то же время вы можете видеть, что IP-адрес, зарегистрированный службой, также 172.17.0.2.В это время мой локальный IP-адрес: 192.168.1.7.Если потребители перейдут к потреблению услуги, это не удастся.

  • Запуск потребителя сообщит об ошибке напрямую

В этом случае многие решения в Интернете решаются путем исправления IP-адреса контейнера, поэтому переносимость не очень хорошая. После повторного обслуживания Dubbo добавил в новую версию две переменные среды для поддержки контейнеров Docker. можно посмотреть официальныйissue.

  • Измените вышеуказанный Dockerfile, добавьте env
    DUBBO_IP_TO_REGISTRY заполняем IP зарегистрированный в zookeeper
FROM openjdk:8-jre-alpine

MAINTAINER luoliang

ENV DUBBO_IP_TO_REGISTRY 192.168.1.7
ENV DUBBO_PORT_TO_REGISTRY 12345

ADD target/dubbo-provider.jar app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/app.jar"]

EXPOSE 12345

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

  • Вы не можете изменить DockerFile, передачу параметров командой запуска
docker run -d -p 12345:12345 -e DUBBO_IP_TO_REGISTRY=192.168.1.7 -e DUBBO_PORT_TO_REGISTRY=12345 --name dubbo-provider dubbo-provider
  • На данный момент журнал поставщика услуг выглядит следующим образом

В настоящее время, хотя текущий хост по-прежнему 172.17.0.2, зарегистрированный адрес службы стал 192.168.1.7.

Создайте образ с помощью плагина maven.

Выше мы все создаем образы вручную, чтобы повысить эффективность, а также чтобы такие проекты, как SpringBoot + Dubbo, могли быть лучше интегрированы в системы CI, такие как Jenkins, для создания полностью автоматического конвейера.

  • Добавьте зависимости плагина в pom
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>build</goal>
                <goal>push</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <repository>dubbo-provider</repository>
        <tag>latest</tag>
        <buildArgs>
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>
  • Поместите файл dockerfile в тот же каталог, что и pom.xml.
project/
  Dockerfile
  pom.xml
  • Упаковка с использованием команды Maven
mvn package 或者 mvn dockerfile:build
  • После выполнения команды вы можете использовать образы Docker для просмотра изображения, а остальные шаги одинаковы, что и выше. После тестирования контейнер работает нормально

End

На этом статья заканчивается, я внес некоторые изменения в исходный код предыдущего блога, Dockfile, использованный в статье, находится в нем, а исходный код — вздесь, Статья представляет собой практическое резюме личного обучения, будут недостатки, если есть лучший способ, добро пожаловать, чтобы указать, спасибо!