Há um artigo de Início no site oficial da Spring, que apresenta como usar o Docker para publicar aplicativos de inicialização da primavera. É bastante detalhado, mas alguns detalhes não são mencionados e o manual de entrada do site oficial está na versão em inglês. Vamos reorganizar e gravar aqui, como uma referência para amigos com inglês pobre, e deixar um memorando.
Preparar
Ferramentas necessárias e ambiente operacional:
Criar um projeto
Primeiro de tudo, você precisa criar um projeto de inicialização da primavera. Spring Tool Suite e Intellij Idea vêm com plug-ins para criar. Outra maneira é criá -lo em http://start.spring.io/. Este método é recomendado. Depois de preencher Group Id e Artifact Id no formulário, clique no botão Gerar Projeto para gerá -lo e importar o projeto baixado para o seu IDE favorito.
Modifique o arquivo pom.xml e adicione o docker-maven-plugin:
<? xml versão = "1.0" coding = "utf-8"?> <Projeto 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"> <ModelVersion> 4.0.0 </modelversion> <puperid> org.matrixstudio.springboot </foupid> <stifactId> Docker </storkactId> <Versão> 0.0.1-Snapshot </sipers> <batyaging> jar </embalagem> <name> docker </name> </Descrição </sipling> </sisbackaging> jar </packaging> <name> docker </Name> <PuerpId> org.springframework.boot </frugiD> <TROTIFACTID> Spring-boot-estrelador-parente </ArtifactId> <Versão> 1.5.2.Release </siSERSE> <PelelityPath/> <!-Lookup Parent from Repository-> </Sirent> <Persies> </ProjectPath.buced.sourceenging do Repositor <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.image.prefix>springio</docker.image.prefix> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> </ArtifactId> Spring-Boot-Starter-Web </starfactId> </dependency> <pendence> <puperid> org.springframework.boot </foupid> <TRAFACTID> Spring-Boot-Starter-Test </stifactId <PuerpId> org.springframework.boot </frugiD> <TROTIFACTID> Spring-boot-maven-plugin </stutifactId> </plugin> <!-plugin de mavenida <rlugin> </grupo> </grupo </groupid> <tifactId> <flupin> <plugIg> com.spotify </groupid> <TifactId> docker-maven-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-pl-plahersten> <FIcguration> <MAageName> $ {Docker.image.prefix}/$ {Project.artifactId} </imagename> <dockerdirectory> src/main/Docker </Dockerdirectory> <ursores> <usetge> <untery>/</TargetPath> <mirectory> $ {Projectory> {Projectory> {Projectory> <ustery> <aMPORTY> <Amctrynerd> {Directory> <aMPRESTORY> {DROCKERDirectory> <useres> <ustery> <untory>/</TargetPath> <mirtory> $ {Projectory> <Incluir> $ {Project.build.FinalName} .jar </bitirO plug-in Docker-Maven-Plugin é usado para criar projetos de inicialização de mola em imagens do Docker:
Abra o arquivo DockerApplication.java e modifique -o com o seguinte conteúdo:
pacote org.matrixstudio.springboot; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootapplication; importação org.springframework.web.bind.annotation.requestmating; 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 e correr
Execute o projeto de inicialização da primavera executando o seguinte comando:
pacote mvn && java -jar alvo/docker-0.0.1-snapshot.jar
Abra o navegador e digite http://localhost:8080 . Se "Hello Docker World" aparecer, significa que a corrida é bem -sucedida.
Nota: Ao executar o comando acima, você precisa baixar muitos pacotes de dependência do repositório oficial do Maven. A rede doméstica não é estável e a velocidade de download é lenta. Você pode considerar o uso de um site de espelho fornecido por terceiros, como o repositório de espelho Maven do Alibaba. Adicione a seguinte configuração ao 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 "> <ModelVersion> 4.0.0 </modelVersion> <voupId> org.matrixstudio.springboot </frupid> <stifactId> dsher </artifactid> <versão> 0.0.0.0.1n0.1n0.1TringBoot </suplyn.1n0.1TringBoot </sication >ptid> <!-Dependências-> ...... <!-Build-> ...... <!-Aliyun Repository-> <Ppository> <id> Central </dod> <name> Aliyun </name> <url> http://maven.aliyun.com/nexus/content/Groups/public/ </usesd> </repositório> </repositório> </positório> </positório> </ject>
Projeto de contêinerização
Primeiro, verifique se o Docker está instalado em sua máquina. Se o seu Docker estiver instalado em um servidor Linux, você precisará fazer upload do projeto de inicialização da mola acima no servidor. As etapas a seguir assumem que você está operando em um ambiente Linux.
Crie um DockerFile
Docker usa um arquivo chamado Dockerfile para especificar a camada de imagem, então precisamos primeiro criar um arquivo Dockerfile e executar o seguinte comando para criar o arquivo Dockerfile :
sudo tee src/main/docker/dockerfile <<-'eof'from frolvlad/alpine-oraclejdk8: slimvolume/tmpadd docker-0.0.1-snapshot.jar app.jarn sh -c' touch /act.Jar'env Java_Ta_Pra " $ Java_Opts -djava.security.egd = arquivo:/dev /./ urandom -jar /pp.jar "] eof
Vamos explicar aproximadamente o comando acima:
Construa uma imagem do Docker
Execute o seguinte comando para construir a imagem do Docker:
Docker de pacote MVN: Build
Depois que a construção é concluída, execute o seguinte comando para visualizar:
Imagens do Sudo Docker
O resultado é:
ID da imagem da tag repositório Tamanho criado
Springio/Docker mais recente 7E2BA2F7E81E 2 minutos atrás 195 MB
Frolvlad/alpine-oraclejdk8 slim 00d8610f052e 4 dias atrás 167 mb
Você pode ver que a imagem que construímos apareceu e a próxima etapa é executar a imagem.
Execute a imagem do Docker
Execute o seguinte comando para executar a imagem do Docker construída na etapa anterior:
Sudo Docker Run -P 8080: 8080 -T Springio/Docker
Se nada inesperado acontecer, você verá a seguinte saída:
. ____ _ __ _ /// / ___'_ __ _ (_) _ __ __ _ / / / / (() / ___ | '_ |' _ | / / / `| / / / / / / / / / / / / / / / / | | | | | | | | | | | | | .__ || | _ | | _ | | _ | | _/__, | / / / / / ========================================== ____ / = / _ / _ / :: Spring Boot :: (v1.5.2.Release) 2017-03-08 03: 34: 59.44 DockerApplication v0.0.1-SNAPSHOT em 00EED53E6928 com PID 6 (/pp.jar iniciado por raiz in /) 2017-03-08 03: 34: 59.445 Info 6 --- [Main] OMSPRINGBOOT.DOCKERAPPLICATION: NÃO CONFILHO ATIVO, Falling Back, Boltafil. 03:34:59.752 INFO 6 --- [ main] cationConfigEmbeddedWebApplicationContext: Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4b9af9a9: startup date [Wed Mar 08 03:34:59 GMT 2017]; Raiz do contexto Hierarchy2017-03-08 03: 35: 03.755 Informações 6 --- [Main] SbcetTomCatembeddedServletContainer: Tomcat Inicializado com portas (s): 8080 (http) 2017-03 08: 35: 03.807 6-2080 (http) 2017-03 08: 35: 03.807 6-2080 (http) 2017-03 08: 35: 03.807 6-03: Serviço TOMCAT2017-03-08 03: 35: 03.821 Info 6 --- [Main] org.apache.catalina.core.StandardEngine: Iniciando Motor de servlet: Apache TomCat/8.5.112017-03-08 03: 35: 04.042 Informações. 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: Mapping Servlet: 'DispatcheserServlet' para [/] 2017-03-08 03: 35: 04.455 Info 6 --- [OST-StartStop-1] OsbWServlet.FilterRegistationBean: Mapping Filter: 'Caracter-1] 03: 35: 04.457 Informações 6 --- [Ost-startStop-1] OsbWServlet.FilterRegistrationBean: Filtro de mapeamento: 'HiddenHttpMethodfilter' para: [/*] 2017-03-08 03: 35: 04.468 Informações 6-[ost-startstop-17-08 03: 35: 04.468 'httpPutFormContentFilter' to: [/*]2017-03-08 03:35:04.468 INFO 6 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2017-03-08 03:35:05.110 INFO 6 --- [main] swsmmareQuestMappingHandlerAdapter: Procurando @ControllerAdvice: org.springframework.boot.context.embedded.annotationConfigembeddedwebapplicationContext@4b9af9a9: data da startup [Wed 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: mapeado "{[/error], produz = [text/html]}" para public org.springframework.web.servlet.modelandview org.springframework.boot.autoconfigure.web.basicerrorcontroller.errorhtml (javax.servlet.http.httpServletRequest, Javax.Servlet.http.httpsletResponsonsOnsion) 2010.2030303. swsMMareQuestMappingHandlerMapping: mapeado "{[/error]}" para public 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.sersl.serpHurl. no manipulador do tipo [classe org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 05.512 Informações 6 --- [principal] Oswshandler.simplerlHandlermapping: Url Path [/**] org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 05.639 Informações 6 --- [main] Oswshandler.spleurlhandlermappating: Mapled Url Path [/**/favicon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icon.icl] A Manuted org.springframework.web.servlet.resource.resourcehttprequesthandler] 2017-03-08 03: 35: 06.019 Info 6 --- [principal] OsjeAnnotationMbeanExporter: REGISTO DO JMX: SUTUP2017777773030-0. SBCETTOMCATEMBEDDEDSERVletContainer: TomCat Iniciado em portas (s): 8080 (HTTP) 2017-03-08 03: 35: 06.183 Informações 6 --- [principal] omspringboot.dockerApplication: DockerApplication em 7.893 segundos (JVM para JVM para JVM. 03: 35: 56.728 Informações 6 --- [NIO-8080-EXEC-1] OCCC [tomcat]. [Localhost]. Estrutura 'DispatcheserServlet': Inicialização Iniciado2017-03-08 03: 35: 56.774 Informações 6 --- [nio-8080-Exex-1] Osweb.servlet.dispatherServlet: estrutura de serviço 'DispatcherServlet': Inicialização Concluída em 43 msExecute o seguinte comando para visualizar o contêiner em execução:
Sudo Docker PS
Você pode ver que há um recipiente do Docker em execução:
Comando de imagem de ID do contêiner portas de status criadas nomes00Eed53e6928 Springio/docker "sh -c 'java $ java ..." cerca de um minuto atrás, cerca de um minuto 0,0.0.0:8080->8080/tcp fervent_leavitt
Agora digite http: // localhost: 8080 para ver o resultado "Hello Docker World".
Se você quiser parar o contêiner, poderá executar o seguinte comando:
Sudo Docker Stop 00e
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.