首页 > 科技 > 为Spring Boot App创建Docker容器

为Spring Boot App创建Docker容器

在本系列中,我们将为简单的Hello World创建一个Docker容器!使用Gradle OR Maven的Spring Boot应用



在尝试本指南之前,您应该具有:

  • 约15分钟的时间
  • Spring Boot应用程序的基本知识
  • Docker基础知识
  • 使用Gradle或Maven构建Java应用程序的基本知识

先决条件:

  • JDK 1.8或更高版本
  • Docker
  • Gradle 4+或Maven 3.2+
  • 任意文字编辑器

如果您不使用Linux机器,则需要一个虚拟服务器。访问VirtualBox的下载站点,并为您的计算机选择版本。


一旦安装了所有必需的软件,就该从git下载源代码了

下载并解压缩本指南的源存储库,或使用Git对其进行克隆:

git clone https://github.com/shrikarvk/SpringBootOnDocker.git

选择Maven或Gradle构建代码。

如果您选择使用Maven,请按照以下步骤操作

了解克隆的git repo中存在的POM.xml


org.springframework
spring-boot-docker
0.1.0
jar
Spring Boot Docker
Getting started with Spring Boot and Docker

org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE



mydocker
1.8

pom.xml for docker

在这里,我们具有使用groupId和版本构建Docker所需的工件。在这里,我们提到了下一步将要构建的Docker映像的前缀。此配置指定将使用名称创建映像的强制性内容mydocker/spring-boot-docker

 

org.apache.maven.plugins
maven-dependency-plugin


unpack
package

unpack




${project.groupId}
${project.artifactId}
${project.version}







pom.xml for maven plugin

POM.xml的这一部分具有构建项目所需的插件

Spring Boot Maven插件收集了类路径上的所有jar,并构建了一个可运行的“ spring-boot-docker-0.1.0.jar”,这使执行和传输服务更加方便。它搜索公共static void main()方法以将其标记为可运行类。而且,它提供了一个内置的依赖项解析器,用于设置版本号以匹配Spring Boot依赖项。

如果您选择使用Gradle,请按照以下步骤操作

了解克隆的git repo中存在的build.gradle

buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
}
dependencies {
classpath('org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE')
classpath('gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.13.0')
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.palantir.docker'
group = 'mydocker'
bootJar {
baseName = 'spring-boot-docker'
version = '0.1.0'
}
task unpack(type: Copy) {
dependsOn bootJar
from(zipTree(tasks.bootJar.outputs.files.singleFile))
into("build/dependency")
}
docker {
name "${project.group}/${bootJar.baseName}"
copySpec.from(tasks.unpack.outputs).into("dependency")
buildArgs(['DEPENDENCY': "dependency"])
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
}

build.gradle

这里,依赖项中添加的Spring Boot gradle插件收集了类路径上的所有jar,并构建了一个可运行的单个“ spring-boot-docker-0.1.0.jar”,这使执行和传输您的文件更加方便服务。它搜索公共static void main()方法以将其标记为可运行类。而且,它提供了一个内置的依赖项解析器,用于设置版本号以匹配Spring Boot依赖项。Docker依赖关系是构建Docker所必需的

该配置还指定以下内容

  • unpack jar文件的任务
  • 图像名称(或标签)是从jar文件属性中设置的,最终将显示为 mydocker/spring-boot-docker
  • 解压缩的jarfile的位置,我们可以在其中进行硬编码 Dockerfile
  • docker指向jar文件的构建参数

设置Spring Boot App

了解克隆的仓库中src文件夹下的Application.java类

package helloDockerWorld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

application.java

该类被标记为@SpringBootApplication和@RestController,这意味着Spring MVC已准备好使用该类来处理Web请求。@RequestMapping映射/到home()仅发送“ Hello Docker World”响应的方法。该main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。


在没有Docker容器的情况下(即在主机OS中)运行应用程序。

如果您使用的是Gradle,请在cmd下执行以构建jar,然后在8080端口运行该应用

./gradlew build && java -jar build/libs/spring-boot-docker-0.1.0.jar

如果您使用的是Maven,请在cmd下执行以构建jar,然后在8080端口运行该应用

./mvnw package && java -jar target/spring-boot-docker-0.1.0.jar

并转到localhost:8080以查看“ Hello Docker World”消息。

如果您能够看到“ Hello Docker World”消息,则表明Spring Boot App已在Tomcat中启动并运行。但是还没有容器化。


我们将其容器化

了解克隆的仓库中的Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","helloDockerWorld.Application"]

Dockerfile

这个Dockerfile有一个DEPENDENCY参数指向我们解开胖子jar包的目录。如果正确,它已经包含一个包含BOOT-INF/lib依赖项jar的BOOT-INF/classes目录和一个包含应用程序类的目录。请注意,我们正在使用应用程序自己的主类helloDockerWorld.Application

现在,我们来构建Docker映像。在构建Docker映像之前,让我们通过执行以下cmd来确保Docker正在运行

docker ps

如果收到错误消息,则说明有问题。重新访问Docker设置


使用Maven构建Docker映像

以下步骤将创建一个名称为Docker的镜像 mydocker/spring-boot-docker

$ ./mvnw install dockerfile:build

使用Gradle构建Docker映像

./gradlew build docker

运行Docker映像

$ docker run -p 8081:8080 -t mydocker/spring-boot-docker

然后可以在http:// localhost:8081上找到该应用程序(访问它,并显示“ Hello Docker World”)。这里的8081是Docker端口,而8080是Tomcat端口。这意味着在tomcat的8080端口上运行的应用程序将在Docker的8081端口上可用。

当Docker运行时,您可以在容器列表中看到,例如:

$ docker ps
CONTAINER ID IMAGE
81c723d22865 mydocker/spring-boot-docker:latest

要关闭Docker,您可以docker stop使用容器ID

$ docker stop 81c723d22865
81c723d22865

做完了!我们为Spring Boot App创建了一个Docker容器

翻译自:https://medium.com/@shrikarvk/creating-a-docker-container-for-spring-boot-app-d5ff1050c14f

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/284227.html