Развитие технологии Docker предоставило более удобную среду для лендинга микросервисов, развернуть Spring Boot с Docker на самом деле очень просто, в этой статье мы кратко его изучим.
Сначала создайте простой проект Spring Boot, затем добавьте в проект поддержку Docker и, наконец, разверните проект.
Простой проект Spring Boot
существует pom.xml
, используя зависимости, связанные с Spring Boot 2.0
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
скопировать код
Добавьте веб-зависимости и тестовые зависимости
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
скопировать код
Создайте DockerController сindex()
метод, который возвращает при доступе:Hello Docker
!
@RestController
public class DockerController {
@RequestMapping("/")
public String index() {
return "Hello Docker!";
}
}
скопировать код
стартовый класс
@SpringBootApplication
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class, args);
}
}
скопировать код
После добавления проекта запустите проект.После успешного запуска браузер спросит:http://localhost:8080/
, страница возвращает:Hello Docker
!
, что указывает на нормальную конфигурацию проекта Spring Boot.
Проект Spring Boot добавляет поддержку Docker
существует pom.xml-properties
Добавьте имя образа Docker в
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
скопировать код
Добавьте плагин сборки Docker в plugins:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
скопировать код
в каталогеsrc/main/docker
Создайте файл Dockerfile ниже, файл Dockerfile используется для описания того, как создать образ.
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-boot-docker-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
скопировать код
Этот файл Dockerfile очень прост, создайте базовую среду Jdk, добавьте Spring Boot Jar в образ и кратко объясните:
-
FROM , указывающее, что в качестве базового образа используется среда Jdk8, если образ не локальный, он будет загружен с DockerHub
-
VOLUME, VOLUME указывает на
/tmp
каталог, так как Spring Boot использует встроенный контейнер Tomcat, Tomcat использует по умолчанию/tmp
как рабочий каталог. Эффект от этой команды: на хосте/var/lib/ docker
Создайте временный файл в каталоге и свяжите его с/tmp
содержание -
ДОБАВИТЬ, скопировать файлы и переименовать
-
ENTRYPOINT, чтобы сократить время запуска Tomcat, добавьте
java.security.egd
Системное свойство указывает на/dev/urandom
как ТОЧКА ВХОДА
На этом проект Spring Boot завершается добавлением зависимостей Docker.
Создайте среду упаковки
Нам нужна среда Docker для упаковки проекта Spring Boot.Создать среду Docker в Windows очень сложно, поэтому я буду использовать Centos 7 в качестве примера.
Установите среду Docker
Установить
yum install docker
скопировать код
После завершения установки используйте следующую команду, чтобы запустить службу Docker и настроить ее на запуск при загрузке:
ervice docker start
chkconfig docker on
#LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
systemctl start docker.service
systemctl enable docker.service
скопировать код
Используйте Docker China Accelerator
vi /etc/docker/daemon.json
#添加后:
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}
скопировать код
перезапустить докер
systemctl restart docker
скопировать код
Входитьdocker version
Если возвращается информация о версии, установка проходит нормально.
Установить JDK
yum -y install java-1.8.0-openjdk*
скопировать код
Настройте переменные среды для открытияvim /etc/profile
Добавьте что-нибудь
-
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
-
export PATH=$PATH:$JAVA_HOME/bin
скопировать код
После того, как модификация завершена, сделайте ее эффективной
source /etc/profile
скопировать код
Входитьjava -version
Если возвращается информация о версии, установка проходит нормально.
Установить МАВЕН
скачать: http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
-
## 解压
-
tar vxf apache-maven-3.5.2-bin.tar.gz
-
## 移动
-
mv apache-maven-3.5.2 /usr/local/maven3
скопировать код
Изменить переменные среды, в/etc/profile
Добавьте следующие строки в
-
MAVEN_HOME=/usr/local/maven3
-
export MAVEN_HOME
-
export PATH=${PATH}:${MAVEN_HOME}/bin
скопировать код
не забудьте выполнитьsource /etc/profile
Заставьте переменные среды действовать.
Входитьmvn -version
Если возвращается информация о версии, установка проходит нормально.
На этом настройка всей среды сборки завершена.
Развертывание проектов Spring Boot с помощью Docker
проектspring-boot-docker
На сервере копирования введите путь к проекту для выполнения теста упаковки.
-
#打包
-
mvn package
-
#启动
-
java -jar target/spring-boot-docker-1.0.jar
скопировать код
После просмотра журнала запуска Spring Boot он показывает, что проблем с конфигурацией среды нет.Далее мы используем DockerFile для создания образа.
mvn package docker:build
скопировать код
Первая сборка может быть немного медленной, но сборка считается успешной, если вы видите следующее:
...
Step 1 : FROM openjdk:8-jdk-alpine
---> 224765a6bdbe
Step 2 : VOLUME /tmp
---> Using cache
---> b4e86cc8654e
Step 3 : ADD spring-boot-docker-1.0.jar app.jar
---> a20fe75963ab
Removing intermediate container 593ee5e1ea51
Step 4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in 85d558a10cd4
---> 7102f08b5e95
Removing intermediate container 85d558a10cd4
Successfully built 7102f08b5e95
[INFO] Built springboot/spring-boot-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 54.346 s
[INFO] Finished at: 2018-03-13T16:20:15+08:00
[INFO] Final Memory: 42M/182M
[INFO] ------------------------------------------------------------------------
скопировать код
использовать docker images
Команда для просмотра построенного образа:
-
docker images
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
springboot/spring-boot-docker latest 99ce9468da74 6 seconds ago 117.5 MB
скопировать код
springboot/spring-boot-docker
это образ, который мы создали, следующим шагом будет запуск образа
-
docker run -p 8080:8080 -t springboot/spring-boot-docker
скопировать код
После завершения запуска мы используемdocker ps
Проверьте бегущее изображение:
-
docker ps
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
049570da86a9 springboot/spring-boot-docker "java -Djava.security" 30 seconds ago Up 27 seconds 0.0.0.0:8080->8080/tcp determined_mahavira
скопировать код
Вы можете видеть, что созданный нами контейнер работает, зайдите в браузер:http://192.168.0.x:8080/
,возвращение
-
Hello Docker!
скопировать код
Это показывает, что проект Spring Boot был успешно развернут с помощью Docker!
Пример кода: https://github.com/ityouknow/spring-cloud-examples
END