SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

发布时间:2021-10-12 14:06:46 作者:柒染
来源:亿速云 阅读:158

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

在现代软件开发中,容器化技术已经成为一种不可或缺的工具。Docker作为最流行的容器化平台之一,能够帮助开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。Spring Boot流行的Java框架,提供了快速构建微服务的能力。本文将详细介绍如何将Spring Boot 2.3应用制作成Docker镜像,并部署到Docker容器中。

1. 准备工作

在开始之前,确保你已经具备以下条件:

2. 创建Spring Boot应用

如果你还没有一个Spring Boot应用,可以通过以下步骤快速创建一个简单的Spring Boot应用。

2.1 使用Spring Initializr创建项目

访问Spring Initializr,选择以下配置:

点击“Generate”按钮下载项目压缩包,解压后导入到你的IDE中。

2.2 编写简单的REST控制器

src/main/java/com/example/demo目录下创建一个DemoApplication.java文件,内容如下:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/")
    public String hello() {
        return "Hello, Docker!";
    }
}

2.3 运行应用

在项目根目录下运行以下命令启动应用:

mvn spring-boot:run

访问http://localhost:8080,你应该会看到“Hello, Docker!”的响应。

3. 制作Docker镜像

接下来,我们将这个Spring Boot应用打包成Docker镜像。

3.1 创建Dockerfile

在项目根目录下创建一个名为Dockerfile的文件,内容如下:

# 使用官方的OpenJDK 8作为基础镜像
FROM openjdk:8-jdk-alpine

# 设置工作目录
WORKDIR /app

# 将Maven构建的JAR文件复制到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 暴露端口
EXPOSE 8080

# 运行应用
ENTRYPOINT ["java", "-jar", "app.jar"]

3.2 构建Docker镜像

在项目根目录下运行以下命令构建Docker镜像:

mvn clean package
docker build -t demo-app .

mvn clean package命令会将Spring Boot应用打包成一个可执行的JAR文件。docker build -t demo-app .命令会根据Dockerfile中的指令构建一个名为demo-app的Docker镜像。

3.3 运行Docker容器

构建完成后,你可以通过以下命令运行Docker容器:

docker run -p 8080:8080 demo-app

访问http://localhost:8080,你应该会看到“Hello, Docker!”的响应,说明Docker容器已经成功运行。

4. 优化Docker镜像

虽然我们已经成功将Spring Boot应用打包成Docker镜像,但还有一些优化空间。以下是一些常见的优化方法。

4.1 使用多阶段构建

多阶段构建可以帮助我们减少最终镜像的大小。我们可以使用一个阶段来构建应用,另一个阶段来运行应用。

修改Dockerfile如下:

# 第一阶段:构建应用
FROM maven:3.6.3-jdk-8 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 第二阶段:运行应用
FROM openjdk:8-jdk-alpine
WORKDIR /app
COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

在这个Dockerfile中,我们使用了两个阶段。第一个阶段使用Maven镜像来构建应用,第二个阶段使用OpenJDK镜像来运行应用。这样可以减少最终镜像的大小,因为构建工具和依赖项不会包含在最终镜像中。

4.2 使用Alpine基础镜像

Alpine Linux是一个轻量级的Linux发行版,适合用于Docker镜像的基础镜像。我们可以使用openjdk:8-jdk-alpine作为基础镜像,进一步减少镜像大小。

4.3 使用分层构建

Docker镜像是由多个层组成的,每一层都可以被缓存和复用。我们可以通过将依赖项和应用程序代码分开来优化镜像的构建和推送。

修改Dockerfile如下:

# 第一阶段:构建应用
FROM maven:3.6.3-jdk-8 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline

COPY src ./src
RUN mvn clean package -DskipTests

# 第二阶段:运行应用
FROM openjdk:8-jdk-alpine
WORKDIR /app
COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

在这个Dockerfile中,我们首先复制pom.xml文件并下载所有依赖项,然后再复制源代码并构建应用。这样,如果依赖项没有变化,Docker可以复用缓存的层,从而加快构建速度。

5. 部署到Docker Hub

如果你希望将镜像分享给其他人或在其他环境中使用,可以将镜像推送到Docker Hub。

5.1 登录Docker Hub

首先,你需要在Docker Hub上注册一个账号,然后使用以下命令登录:

docker login

输入你的Docker Hub用户名和密码。

5.2 标记镜像

在推送镜像之前,需要为镜像打上标签,格式为<Docker Hub用户名>/<镜像名>:<标签>

docker tag demo-app <Docker Hub用户名>/demo-app:1.0

5.3 推送镜像

使用以下命令将镜像推送到Docker Hub:

docker push <Docker Hub用户名>/demo-app:1.0

推送完成后,你可以在Docker Hub上查看和管理你的镜像。

6. 总结

通过本文,我们详细介绍了如何将Spring Boot 2.3应用制作成Docker镜像,并部署到Docker容器中。我们还探讨了一些优化Docker镜像的方法,如多阶段构建、使用Alpine基础镜像和分层构建。最后,我们还介绍了如何将镜像推送到Docker Hub,以便在其他环境中使用。

容器化技术为现代软件开发带来了极大的便利,希望本文能帮助你更好地理解和应用Docker与Spring Boot的结合。

推荐阅读:
  1. 《SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用》
  2. 怎么使用Prometheus+Grafana的方法监控Springboot应用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot docker

上一篇:CSS中浏览器对尺寸和宽高解释差异怎么办

下一篇:如何解决ie6中select无法被div遮盖的bug

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》