Оригинальный адрес: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, использованный в статье, находится в нем, а исходный код — вздесь, Статья представляет собой практическое резюме личного обучения, будут недостатки, если есть лучший способ, добро пожаловать, чтобы указать, спасибо!