Spring Boot Docker 部署,为在 Docker 容器上部署我们的 Spring Boot 微服务打开了大门。让我们来看看这个过程!
什么是 Docker?
Docker 是一个平台,使开发人员能够以容器化应用程序的形式开发、发布和执行应用程序。
它通过为您的应用程序创建一个轻量级的可执行包来实现这一点。此包包括应用程序代码以及应用程序运行所需的所有依赖项。依赖关系可以是环境变量、库、工具等。
这样的可执行包通常也称为映像。一个正在运行的镜像是一个容器。
Docker 本身就是一个庞大的话题。如果您想了解更多信息,我有一篇关于 Docker 基础知识的详细文章。
使用 Dockerfile 定义 Docker 镜像
要为我们的 Spring Boot Docker 部署创建 Docker 映像,我们需要在项目的根目录中创建一个Dockerfile。
以下是典型 Spring Boot 应用程序的 Dockerfile 内容。
# Start with base image
FROM openjdk:8-jdk-alpine
# Add Maintainer Info
LABEL maintainer="Progressive Coder"
# Add a temporary volume
VOLUME /tmp
# Expose Port 8080
EXPOSE 8080
# Application Jar File
ARG JAR_FILE=target/spring-boot-starter-0.0.1-SNAPSHOT.jar
# Add Application Jar File to the Container
ADD ${JAR_FILE} spring-boot-starter.jar
# Run the JAR file
ENTRYPOINT ["java", "-jar", "/spring-boot-starter.jar"]
让我们来看看 Dockerfile 中的每一步。
FROM: 此语句用于表示我们的新 Docker 映像将使用的基本映像。在上面的示例中,我们使用了OpenJDK 8映像。这是运行 Java 应用程序的一个非常轻量级的选项。
LABEL:此指令用于向图像添加某种类型的元数据。在这种情况下,我们添加了名为MAINTAINER的元数据。
VOLUME:Volume 指令在容器中创建一个挂载点。您还可以将挂载点映射到主机操作系统上的目录。卷的典型用例是存储由我们的应用程序生成的日志文件。
EXPOSE:这是一条重要的指令。它允许我们向外界公开特定的端口。在我们的示例中,我们公开端口 8080。
ARG:该指令用于定义一个具有默认值的变量。在我们的例子中,我们将它设置为 JAR 文件的位置。
添加:在本指令中,我们基本上是将文件和目录复制到我们的 docker 镜像。
ENTRYPOINT:最后但并非最不重要的是,ENTRYPOINT 是您配置应如何执行应用程序的地方。在我们的例子中,我们指定了如何运行 JAR 文件。
创建 Docker 镜像
现在是创建 Docker 镜像的时候了。为此,我们需要在 Spring Boot 项目区域中准备好 JAR 文件。
要创建 JAR 文件,请执行以下命令。
mvn clean package
现在要构建 Dockerfile,需要运行以下命令:
docker build -t spring-boot-starter .
执行此命令后,您将能够看到正在构建的映像。如果您执行以下命令,您可以看到图像列表:
docker image ls
运行 Docker 镜像
现在镜像已成功构建,您可以使用Docker Run命令运行 Docker 镜像。
docker run spring-boot-starter
基本上,我们要求 Docker 运行标记为spring-boot-starter的镜像。换句话说,这就是我们在这篇文章中一直针对的 Spring Boot Docker 部署。
这将创建一个容器,应用程序将开始运行。要查看当前运行的容器列表,您可以使用以下命令:
docker ps
可以通过http://localhost:8080访问该应用程序
您还可以通过发出以下命令来运行容器来更改容器的端口。
docker run -p 5000:8080 spring-boot-starter
基本上,这里的 5000 是主机操作系统上的端口。我们将容器上的端口 8080 映射到主机操作系统上的端口 5000。
如果你想停止正在运行的容器,你可以按CTRL + C。
结论
这样,我们就成功地为我们的微服务创建了一个Spring Boot Docker 部署。
我们首先创建了一个 Docker 镜像,然后在主机操作系统上运行它。Docker Image 也可以通过 Docker Hub 公开共享。通常,企业也有内部 Docker 注册表,其中存储图像以备将来使用。我们将在以后的文章中探讨这些概念。对于源码我们可以在Github上找到。