На официальном веб -сайте Spring есть статья «Получительно старт», которая представляет, как использовать Docker для публикации приложений Spring Boot. Это довольно подробно, но некоторые детали не упоминаются, и официальное руководство по входу на веб -сайт находится в английской версии. Давайте реорганизуем и записываем его здесь, в качестве ссылки для друзей с плохим английским языком и оставим себе меморандум.
Подготовить
Требуемые инструменты и операционная среда:
Создать проект
Прежде всего, вам нужно создать проект Spring Boot. Spring Tool Suite и IntelliJ Idea поставляются с плагинами для создания. Другой способ - создать его с http://start.spring.io/. Этот метод рекомендуется. После заполнения Group Id и Artifact Id в форме нажмите кнопку «Создать проект», чтобы сгенерировать его и импортировать загруженный проект в свою любимую IDE.
Измените файл pom.xml и добавить Docker-Maven-Plugin:
<? xml version = "1.0" Encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.0.0.0.0.0.0. <modelVersion>4.0.0</modelVersion> <groupId>org.matrixstudio.springboot</groupId> <artifactId>docker</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>docker</name> <description>Demo project for Spring Boot</description> <parent> <groupId> org.springframework.boot </GroupId> <StrifactId> Spring-Boot-Starter-parent </artifactid> <sersive> 1.5.2.2.release </version> <venustaryPath/> <!-Поиск родителя из репозитория-> </parent> <properties> <project.build.sourceencoding> UTF-8 </project.build.sourceEncoding> <project.Report.OutputEncoding> UTF-8 </Project.Report.OutputEncoding> <java.version> 1.8 </java.version> <docker.image.prefix> pressfire.prefix> pressfire.prefix> pressfire.prefix> pressfire. </свойства> <Depertiendions> <dehyederience> <groupid> org.springframework.boot </GroupId> <artifactId> Spring-boot-starter-web </artifactid> </depertive> <dependency> <groupid> org.springframework.boot </Groupid> <artifactId> spring-boot-starter-starter-test-test-test-test-test-test-testid> </artifactid> </deperency> </redicents> <buld> <blicins> <groupid> org.springframework.boot </GroupId> <strifactid> Spring-boot-maven-plugin </artifactid> </plugin> <!-Docker Maven Plugin-> <bricin> <groupid> com.spotify </GroupId> <Artifactid> docker-pluger-pluger> docker-pluger-pluged-pluge-pluger> docker-pluger-pluger> <bricin> <groupid>. <serse> 0.4.3 </version> <fincuturation> <ImageName> $ {docker.image.prefix}/$ {project.artifactid} </ImageName> <dockerdirectory> src/main/docker </dockerdirectory> <resource> <TargetPath>/</targetPath </dockerDirector <Directory> $ {project.build.directory} </directory> <clact> $ {project.build.finalname} .jar </inclust> </resources> </configuration> </placin> </placins> </build> </project>Плагин Docker-Maven-Plugin используется для создания проектов Spring Boot в Docker Images:
Откройте файл DockerApplication.java и измените его на следующее контент:
Пакет org.matrixstudio.springboot; import org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootapplication; импорт org.springframework.web.bindtation.requestmaping; org.springframework.web.bind.annotation.restcontroller;@SpringbootApplication@RestControllerPublic Class DockerApplication {@Requestmapping ("/") public String Home () {return "Hello Docker World"; } public static void main (string [] args) {springApplication.run (dockerapplication.class, args); }} Скомпилируйте и бегите
Запустите проект Spring Boot, выполнив следующую команду:
MVN Package && Java -Jar Target/Docker-0.0.1-snapshot.jar
Откройте браузер и введите http://localhost:8080 . Если появится «Hello Docker World», это означает, что пробег успешен.
Примечание. При выполнении вышеуказанной команды вам нужно загрузить много пакетов зависимостей из официального репозитория Maven. Внутренняя сеть не стабильна, а скорость загрузки медленная. Вы можете рассмотреть возможность использования зеркального сайта, предоставленного третьей стороной, например, Maven Mirror Repository от Alibaba. Добавьте следующую конфигурацию в pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> <dolidyversion> 4.0.0 </modelversion> <groupid> org.matrixstudio.springboot </GroupD> <strifactid> docker </artifactid> <version> 0.0.1.1-snapshotgegaging> <serifgegaging> <seriate> <versive> <version> 0.0. <!-Зависимости-> ...... <!-build-> ...... <!-aliyun Repository-> <preository> <id> Central </id> <mame> aliyun </name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <learses> </ineses> <nableder> </ineses> </ineses> <preabled> </inesese> </ineses> </ineseaes> </inesese> </inesese> </ineses> </ineses> </ineses> </ineserse> </Repository> </Repository> </Repository> </Repository> </project>
Проект контейнеризации
Во -первых, убедитесь, что Docker установлен на вашей машине. Если ваш Docker установлен на сервере Linux, вам необходимо загрузить вышеуказанный проект Spring Boot на сервер. Следующие шаги предполагают, что вы работаете в среде Linux.
Создайте Dockerfile
Docker использует файл с именем Dockerfile , чтобы указать уровень изображения, поэтому нам сначала нужно создать файл Dockerfile и выполнить следующую команду для создания файла Dockerfile :
sudo tee src/main/docker/dockerfile <<-'eof'from frolvlad/alpine-oraclejdk8: slimvolume/tmpadd docker-0.0.1-snapshot.jar app.jarrun sh -c $ Java_opts -djava.security.egd = file:/dev /./ urandom -jar/app.jar "] eof
Давайте грубо объясним вышеуказанную команду:
Создайте изображение Docker
Запустите следующую команду, чтобы построить изображение Docker:
MVN Package Docker: Build
После завершения сборки запустите следующую команду для просмотра:
Sudo Docker Images
Результат:
Идентификатор изображения тега репозитория создал размер
Springio/Docker Последние 7e2ba2f7e81e 2 минуты назад 195 МБ
Frolvlad/Alpine-Oraclejdk8 Slim 00d8610f052e 4 дня назад 167 МБ
Вы можете видеть, что появилось изображение, которое мы построили, и следующий шаг - запустить изображение.
Запустите изображение Docker
Выполните следующую команду, чтобы запустить изображение Docker, встроенное на предыдущем шаге:
Sudo Docker Run -p 8080: 8080 -t Springio/Docker
Если ничего неожиданного не произойдет, вы увидите следующий вывод:
Полем ____ _ __ _ //// / ___'_ __ __ _ (_) _ __ __ _ / / / / / (() / ___ | '_ |' _ | / / / / / / / / / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | .__ || | _ | | _ | | _ | | _/__, | / / / / ============================================================================================= DockerApplication v0.0.1-snapshot on 00eed53e6928 с PID 6 ( /app.jar, запущенным в Root In /) 2017-03-08 03: 34: 59.445 Информация 6 --- [Main] Omspringboot.dockerapplication: без активного профиля, падает в Проживание Default. 03: 34: 59,752 Информация 6 --- [Main] CationConfigembeddedWebApplicationContext: освежающий org.springframework.boot.context.embedded.annotationConfigembeddedWebApplicationContext@4b9af9a9: дата запуска [ср. 08 03:34:59 GMT 2017]; Корень контекста иерархии2017-03-08 03: 35: 03.755 Информация 6 --- [Main] sbcettomcatembeddedservletcontainer: Tomcat, инициализированный с портом (S): 8080 (http) 2017-03-08 03: 35: 03.807 info 6-[Main] O. Сервис Tomcat2017-03-08 03: 35: 03.821 Информация 6 --- [Main] org.apache.catalina.core.standardengine: Начальный двигатель сервлета: Apache Tomcat/8.5.112017-03-08 03: 35: 04.042 INFO 6-[OST-STARTOP-1] OACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Инициализация Spring Embedded WebPplicationContext2017-03-08 03: 35: 04.043 Информация 6 --- [OST-StartStop-1] OST-WEB.CONTEXT.CONTEXTLOADER: ROOT WEBPPLICATCONCONTEXT: Инициализация, завершенная в 4303 MS2017-03-08 03: 35: 04.441 Info 6 ----- ost-bwservlet.servletregistrationbean: картирование Сервлета: 'DispatcherServlet' to [/] 2017-03-08 03: 35: 04.455 Информация 6 --- [ost-startstop-1] osbwservlet.filterRegistrationBean: картирование: 'Характерный 03: 35: 04.457 Информация 6 --- [ost-startstop-1] osbwservlet.filterRegistrationBean: Фальт-картирование: 'hiddenhttpmethodfilter' to: [/*] 2017-03-08 03: 35: 04.468. Фильтр: 'httpputformcontentfilter' to: [/*] 2017-03-08 03: 35: 04.468 Информация 6 --- [ost-startstop-1] osbwservlet.filterRegistrationBean: картирование: 'requestContextfilter' to: [/*] 2017-03-08 03: 35: 05.10-05.10-05.10-05.10-05.10- SWSMMArequestmappingHandlerAdapter: ищу @ControllerAdvice: org.springframework.boot.context.embedded.annotationConfigeDdedWebApplicationContext@4b9af9a9: дата запуска [Ср. 08 03:34:59 GMT 2017]; root of context hierarchy2017-03-08 03:35:05.390 INFO 6 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String org.matrixstudio.springboot.DockerApplication.home()2017-03-08 03:35:05.402 INFO 6 --- [main] swsmmarequestmappingHandLermapping: maped "{[/error], производит = [text/html]}" на публичный org.springframework.web.servlet.modelandView org.springframework.boot.autoconfigure.web.basicerrorcontroller.errorhtml (javax.servlet.http.httpservletrequest, javax.servlet.http.httpservelsepons SWSMMArequestmappingHandlermapping: maped "{[/error]}" на публичный org.springframework.http.responseentity <java.util.map <java.lang.string, java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorController.error (javax.servlet.http.httpservletrequest) 2017-03-08 03: 35: 05.512 Информация 6 --- [Main] Oswshandler.siMpleurlermapp Обработчик типа [Class org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 05.512 Информация 6 --- [Main] Oswshandler.simpleurlhandlermapp: Сопоставленный путь URL [/**] org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 05.639 Информация 6 --- [main] oswshandler.simpleurlhandlapp: mapped url [/**/favicon.ico] на ручной org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 06.019 Информация 6 --- [Main] OsjeaAnanotationMbeanexporter: 35: 06.16. SbcettomCateMbeddedServletContainer: Tomcat запустил в порту (S): 8080 (http) 2017-03-08 03: 35: 06.183 Информация 6 --- [Main] Omspringboot.dockerApplication: начало докераппликации в 7,893 секунды (JVM Running для 8.743) 2017-03-03-03-03-03-03-03-03-03-03-03-03-03-03. 03: 35: 56,728 Информация 6 --- [NIO-8080-EXEC-1] occc [Tomcat]. Frameworkservlet 'DispatcherServlet': инициализация началась 2017-03-08 03: 35: 56.774 Информация 6 --- [NIO-8080-EXEC-1] OSWEB.Servlet.DispatcherServlet: FrameWorkServlet 'DispatcherServlet': Инициализация завершена в 43 мс.Выполните следующую команду для просмотра контейнера Docker Docker:
Sudo Docker PS
Вы можете видеть, что работает контейнер Docker:
Команда идентификатора контейнера создал порты статуса имена имена nameed53e6928 springio/docker "sh -c 'java $ java ..." Около минуты назад около минуты 0.0.0.0:8080->8080/tcp fervent_leavitt
Теперь введите http: // localhost: 8080, чтобы просмотреть результат «Hello Docker World».
Если вы хотите остановить контейнер, вы можете выполнить следующую команду:
Sudo Docker Stop 00e
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.