在本教程中,我们将学习如何使用 Docker 使用两种不同的方法运行 Spring Boot 应用程序:设置 Dockerfile 和使用 Spring Boot Maven 插件 的配置选项。
出于本示例的目的,我们将使用 Spring Boot 命令行界面。您可以选择任何其他选项来引导您的 Spring Boot 项目。
首先,创建一个包含 web 依赖项的新项目:
spring init -dweb demo-rest
现在在您最喜欢的 IDE 中导入 Maven 项目并添加一个名为 Customer 的模型类,它将由 GET 请求返回:
package com.example.demorest;
public class Customer {
private int id;
private String name;
public Customer(int id, String name) {
super();
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
在 Spring Boot 中构建 Rest Service 所需的只是一个 RestController:
package com.example.demorest;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomerController {
@RequestMapping("/")
public List<Customer> findAll() {
List<Customer> customerList = new ArrayList<Customer>();
customerList.add(new Customer(1, "frank"));
customerList.add(new Customer(2, "john"));
return customerList;
}
}
RestController :@RestController 注释提供了@ResponseBody 和@Controller 注释的组合。这是创建 REST 控制器的标准选项。
RequestMapping:带有**@RequestMapping** 的方法将处理对“/”URI 的通用请求。如果未指定,它会映射一个 GET 请求。
现在编译并打包应用程序:
$ mvn clean install
让我们检查一下构建示例应用程序的 Docker 映像的两种可用方法
首先,在项目根文件夹中创建一个文件Dockerfile,内容如下:
FROM adoptopenjdk/openjdk11:alpine-jre
# Add Maintainer Info
LABEL maintainer="marchioni.francesco@gmail.com"
# Add a volume pointing to /tmp
VOLUME /tmp
# Make port 8080 available to the world outside this container
EXPOSE 8080
# The application's jar file
ARG JAR_FILE=target/demo-docker-0.0.1-SNAPSHOT.jar
# Add the application's jar to the container
ADD ${JAR_FILE} demo-docker-0.0.1-SNAPSHOT.jar
# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo-docker-0.0.1-SNAPSHOT.jar"]
这个 Dockerfile 非常简单:让我们回顾一下:
openjdk:8-jdk-alpine
映像作为基础映像。VOLUME
指令在容器上创建具有指定路径的挂载点。运行容器时,您可以指定热操作系统上给定挂载点将映射到的目录。之后,容器写入挂载路径的任何内容都会写入主机操作系统上的映射目录。在上面的 Dockerfile
中,我们创建了一个路径为 /tmp
的挂载点,因为这是 Spring Boot 应用程序为 Tomcat 创建工作目录的地方默认。ARG
指令定义了一个具有默认值的变量。您可以通过在构建时传递变量来覆盖该变量的默认值。ARG <name>[=<default value>]
ADD
指令允许将新文件和目录复制到 docker 映像。将 Dockerfile 保存在当前目录中。然后,我们将构建并标记应用程序:
docker build -t docker-demo .
最后,您可以使用以下命令运行它:
docker run -p 8080:8080 docker-demo
应用程序将在端口 8080 上启动:
此示例的源代码可在此处获得:https://github.com/fmarchioni/masterspringboot/tree/master/demo-docker
此选项不需要创建任何其他文件。您只需要在 spring-boot-maven-plugin 中添加 image 的配置选项:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>pedroluiznogueira/${project.artifactId}:${project.version}</name>
</image>
<pullPolicy>IF_NOT_PRESENT</pullPolicy>
</configuration>
</plugin>
您还可以指定 pullPolicy:可接受的值为 ALWAYS、NEVER 和 IF_NOT_PRESENT。
接下来,要构建它,请运行:
mvn spring-boot:build-image
如果您检查可用 Docker 映像的列表,您将看到一个新的可用:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-demo latest e861294b2bee 17 minutes ago 166MB
. . . .
pedroluiznogueira/pom-example 0.0.3 d546b71161e4 42 years ago 275MB
最后,运行镜像如下:
docker run -p 8080:8080 docker.io/pedroluiznogueira/pom-example:0.0.3
应用程序将启动:
伟大的!我们刚刚设法在 Docker 上运行了我们的第一个 Spring Boot 应用程序!
第二个示例的源代码可在此处获得:https://github.com/pedroluiznogueira/docker-pom-example
感谢 Java 软件工程师 Pedro Luiz 分享了这个例子。
如果您想了解如何为您自动创建 Dockerfile 和映像,请查看本教程:如何构建 Spring Boot 应用程序的 Docker 映像
如果您想了解如何在 OpenShift 上部署 Spring Boot 应用程序,请查看:How to run a Spring Boot application on Openshift.
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.masterspringboot.com/cloud/docker/running-a-spring-boot-application-with-docker
内容来源于网络,如有侵权,请联系作者删除!