Hay un artículo de inicio en el sitio web oficial de Spring, que presenta cómo usar Docker para publicar aplicaciones de arranque de primavera. Es bastante detallado, pero no se mencionan algunos detalles, y el manual de entrada del sitio web oficial está en la versión en inglés. Reorganicemos y grabemos aquí, como una referencia para amigos con pobre inglés, y dejéte un memorando.
Preparar
Herramientas requeridas y entorno operativo:
Crea un proyecto
En primer lugar, debe crear un proyecto de arranque de primavera. Spring Tool Suite y IntelliJ Idea vienen con complementos para crear. Otra forma es crearlo desde http://start.spring.io/. Se recomienda este método. Después de completar Group Id y Artifact Id en el formulario, haga clic en el botón Generar el proyecto para generarlo e importar el proyecto descargado en su IDE favorito.
Modifique el archivo pom.xml y agregue Docker-Maven-Plugin:
<? xml versión = "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.xsd" <modelVersion> 4.0.0 </modelversion> <MoupRoid> org.matrixstudio.springboot </proupid> <artifactid> docker </arfactid> <verserse> 0.0.1-snapshot </versewers> <compacking> jar </paquete> <name> Docker </name> <cription> Proyecto Demo para brote de primavera </descripción> <ports> <MoupRoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <versión> 1.5.2.release </versión> <relativePath/> <!-Buscar padres desde el apositorio-> </parent> <protesis> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.image.prefix>springio</docker.image.prefix> </propiedades> <pendencies> <epardency> <grupid> org.springframework.boot </groupid> <artifactID> spring-boot-starter-web </artifactid> </dependency> <epardency> <proupid> org.springframework.boot </groupid> <artifactid> spring-starter-test </artid> <cope> test </scope> </pepertency> </pendencs> <struple> <glugins> <grupoD> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactID> </plugin> <!-Docker Maven Plugin-> <tugin> <MoupRid> com.spotify </groupid> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <Directory> $ {Project.Build.Directory} </Directory> <Incluye> $ {Project.Build.FinalName} .JAR </include> </ recursos> </figuration> </glugin> </glugins> </build> </proyecto>El complemento Docker-Maven-Plugin se utiliza para construir proyectos de arranque de primavera en imágenes de Docker:
Abra el archivo DockerApplication.java y modifíquelo al siguiente contenido:
paquete org.matrixstudio.springboot; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import og.springframework.web.bind.annotation.requestmapping; import 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); }} Compilar y ejecutar
Ejecute el proyecto Spring Boot ejecutando el siguiente comando:
paquete mvn && java -jar Target/Docker-0.0.1-Snapshot.jar
Abra el navegador e ingrese http://localhost:8080 . Si aparece "Hello Docker World", significa que la carrera es exitosa.
Nota: Al ejecutar el comando anterior, debe descargar muchos paquetes de dependencia del repositorio oficial de Maven. La red nacional no es estable y la velocidad de descarga es lenta. Puede considerar usar un sitio de espejo proporcionado por un tercero, como el repositorio Maven Mirror de Alibaba. Agregue la siguiente configuración a 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.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. http://maven.apache.org/xsd/maven-4.0.0.xsd "> <modelVersion> 4.0.0 </modelversion> <MoupRupid> org.matrixstudio.springboot </groupid> <artifactid> docker </artifker> <proation> Dependencias-> ...... <!-Build-> ...... <!-Repository Aliyun-> <Repositorio> <d> Central </id> <name> Aliyun </name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </surl> <loteseS> <WAdabled> true </enable> </cableable <</endabled <- </endabled <- </endabled <- </endabled <- </repository> </epositorio> </epository> </jecti>
Proyecto de contenedores
Primero, asegúrese de que Docker esté instalado en su máquina. Si su Docker está instalado en un servidor de Linux, debe cargar el proyecto de arranque de primavera anterior al servidor. Los siguientes pasos suponen que está operando en un entorno de Linux.
Crea un Dockerfile
Docker usa un archivo llamado Dockerfile para especificar la capa de imagen, por lo que primero debemos crear un archivo Dockerfile y ejecutar el siguiente comando para crear el archivo Dockerfile :
sudo tee src/main/docker/dockerfile <<-'eof'From frolvlad/alpine-oraclejdk8: slimvolume/tmpadd docker-0.0.1-snapshot.jar app.Jarrun sh -c' touch /app.jar'env java_opts = " $ Java_opts -djava.security.egd = file:/dev /./ urandom -jar /app.jar "] EOF
Expliquemos aproximadamente el comando anterior:
Construir una imagen de Docker
Ejecute el siguiente comando para construir la imagen Docker:
Docker de paquete MVN: construir
Después de completar la compilación, ejecute el siguiente comando para ver:
Imágenes de sudo Docker
El resultado es:
ID de imagen de etiqueta de repositorio Tamaño creado
Springio/Docker Último 7E2BA2F7E81E hace 2 minutos 195 MB
frolvlad/alpine-oraclejdk8 slim 00d8610f052e 4 días hace 167 mb
Puede ver que la imagen que construimos ha aparecido, y el siguiente paso es ejecutar la imagen.
Ejecutar la imagen de Docker
Ejecute el siguiente comando para ejecutar la imagen de Docker creada en el paso anterior:
Sudo Docker Run -P 8080: 8080 -T Springio/Docker
Si no sucede nada inesperado, verá la siguiente salida:
. ____ _ __ _ /// / ___'_ __ _ (_) _ __ __ _ / / / / (() / ___ | '_ |' _ | / / `| / / / / / / / / / / / / / / | | | | | | | | | | | | || (_ |)))) '| ____ | .__ || | _ | | _ | | _ | | _/__, | / / / / / / ============================================= ____ / = / / _ / _ / :: Spring Boot :: (v1.5.2.Release) 2017-03-08 03: 34: 59.434 Info DockerApplication v0.0.1-snapshot en 00eed53e6928 con pid 6 (/app.jar iniciado por root in /) 2017-03-08 03: 34: 59.445 info 6 --- [main] omspringboot.dockerapplication: no hay un perfil activo conjunto, cayendo hacia el predeterminado: default2017-03-08 03: 34: 54: 549.750 --- [Main] CationConfigembeddedWebApplicationContext: Refreshing org.springframework.boot.context.embedded.annotationConfigembeddedwebapplicationContext@4b9af9a9: fecha de inicio [miércoles 08 03:34:59 GMT 2017]; Root del contexto jerarquía2017-03-08 03: 35: 03.755 Información 6 --- [Main] SBCetTomCatEmbedDedServletContainer: Tomcat inicializado con puerto (s): 8080 (HTTP) 2017-03-08 03: 35: 03.807 Información 6 --- [MAIN] O.Apache.Ceore. Servicio de arranque TOMCAT2017-03-08 03: 35: 03.821 Información 6 --- [Main] org.apache.catalina.core.standardengine: inicial de servlet motor: apache tomcat/8.5.112017-03-08 03: 35: 04.042 información 6 --- [ost-startstop-1] oacccc [Tomcat]. : Initializing Spring embedded WebApplicationContext2017-03-08 03:35:04.043 INFO 6 --- [ost-startStop-1] ost-web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4303 ms2017-03-08 03:35:04.441 INFO 6 --- [ost-startStop-1] OST-Bwservlet.ServletRegistrationBean: Servlet de mapeo: 'DispatcherServlet' a [/] 2017-03-08 03: 35: 04.455 Información 6 --- [OST-STARTSTOP-1] OSBWServlet.FilterRegistrationBean: Filtro de mapeo: 'CARACTERENCODINGFILTER' TO: [/*] 2017-03-03-08-08 03: 35: 04.457 Información 6 --- [OST-STARTSTOP-1] OSBWServlet.FilterRregistrationBean: Filtro de mapeo: 'Hiddenhttpmethodfilter' a: [/*] 2017-03-08 03: 35: 04.468 Info 6 --- [ost-startstop-1] OSBWWWWWWWWWLETLETLETLETLETTER Filtro: 'httpputFormContentFilter' a: [/*] 2017-03-08 03: 35: 04.468 INFO 6 --- [OST-STARTSTOP-1] OSBWServlet.FilterRegistrationBean: Mapeo de filtro: 'SoldContextFilter' a: [/*] 2017-03-08 03: 35: 05.110 Info110 SWSMMareQuesteMappingHandlerAdapter: Buscando @ControllerAdvice: org.springframework.boot.context.embedded.annotationConfigembeddedwebapplicationContext@4b9af9a9: fecha de inicio [miércoles 08 03:34:59 GMT 2017]; Root del contexto jerarquía2017-03-08 03: 35: 05.390 Información 6 --- [Main] SWSMMAREQUESTMAPPingHandLermapping: Mapped "{[/]}" en el público java.lang.String Org.matrixStudio.ssspboot.dockerapplication.Home () 2017-03-08 03: 35: 35: 35: 05. --- [Main] SWSMMareQuestMappingHandlermapping: mapeado "{[/error], produce = [text/html]}" en público org.springframework.web.servlet.modelandview org. SWSMMAREQUESTMAPPingHandLermapping: Mapped "{[/error]}" en público 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 info 6 --- [main] Oswshandler.simpleurlingspapting: MAPEPED Manejador de tipo [clase org.springframework.web.servlet.resource.resourcehtttprequesthandler] 2017-03-08 03: 35: 05.512 información 6 --- [main] OsWshandler.SimpleurlHandlermapping: Mapped URL Rath [/**] en Handler de Tipo [Class org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 05.639 Información 6 --- [Main] OSWShandler.SimpleurlHandlermapping: ruta de URL mapeada [/**/favicon.ico] en Handler de Type [ClassCal org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 06.019 Información 6 --- [Main] OsJeaannotationMBeanExporter: Información de registro de granos para la exposición JMX en STARTUp2017-03-08 03: 35: 06.16.168 sbcettomCatembeddedServletContainer: Tomcat comenzó en el puerto (s): 8080 (http) 2017-03-08 03: 35: 06.183 Información 6 --- [principal] OMSPRINGBOOT.DOCKERAPLACIÓN: comenzó Dockerapplication en 7.893 segundos (JVM en ejecución por 8.743) 2017-03-03-08 03: 35: 56.728 Información 6 --- [NIO-8080-EXEC-1] OCCC [TOMCAT]. [LOCALHOST]. [/]: Inicialización de Spring FrameWorkServlet 'Dispatcherservlet'2017-03-08 03: 35: 56.728 Información 6 --- [NIO-8080-EXEC-1] OSWEB.Servlet.Servlet.: FrameWorkServlet 'DispatcherServlet': Inicialización inicial2017-03-08 03: 35: 56.774 Información 6 --- [NIO-8080-EXEC-1] OSWEB.SERVLET.DISPATCHERServlet: FrameWorkServlet 'DispatcherServlet': Inicialización completa en 43 MSEjecute el siguiente comando para ver el contenedor de Docker en ejecución:
sudo docker ps
Puede ver que hay un contenedor Docker en ejecución:
Comando de imagen de ID de contenedor creado Puertos de estado nombres00eed53e6928 Springio/Docker "SH -C 'Java $ Java ..." Hace aproximadamente un minuto hasta un minuto 0.0.0.0:8080->8080/tcp fervent_leavitt
Ahora ingrese http: // localhost: 8080 para ver el resultado "Hello Docker World".
Si desea detener el contenedor, puede ejecutar el siguiente comando:
Sudo Docker Stop 00e
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.