温馨提示×

温馨提示×

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

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

SpringBoot(2.3)应用制作Docker镜像的过程

发布时间:2021-10-12 14:01:05 来源:亿速云 阅读:169 作者:柒染 栏目:云计算

SpringBoot(2.3)应用制作Docker镜像的过程

1. 引言

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

2. 准备工作

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

  • Java开发环境:JDK 8或更高版本。
  • Maven或Gradle:用于构建Spring Boot应用。
  • Docker:确保Docker已安装并运行在你的开发机器上。
  • Spring Boot应用:一个可运行的Spring Boot 2.3应用。

3. 创建Spring Boot应用

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

3.1 使用Spring Initializr创建项目

  1. 打开Spring Initializr
  2. 选择项目类型为Maven或Gradle。
  3. 选择Spring Boot版本为2.3.x。
  4. 添加依赖项,例如Spring Web
  5. 点击“Generate”按钮下载项目。

3.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("/hello") public String hello() { return "Hello, Docker!"; } } 

3.3 运行应用

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

mvn spring-boot:run 

或者使用Gradle:

gradle bootRun 

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

4. 构建Spring Boot应用

在将应用打包成Docker镜像之前,首先需要将Spring Boot应用构建成一个可执行的JAR文件。

4.1 使用Maven构建

在项目根目录下运行以下命令:

mvn clean package 

构建完成后,你会在target目录下找到一个名为demo-0.0.1-SNAPSHOT.jar的文件。

4.2 使用Gradle构建

在项目根目录下运行以下命令:

gradle build 

构建完成后,你会在build/libs目录下找到一个名为demo-0.0.1-SNAPSHOT.jar的文件。

5. 创建Dockerfile

Dockerfile是一个文本文件,包含了一系列指令,用于定义如何构建Docker镜像。接下来,我们将为Spring Boot应用创建一个Dockerfile。

5.1 创建Dockerfile

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

# 使用官方的OpenJDK 8作为基础镜像 FROM openjdk:8-jdk-alpine # 设置工作目录 WORKDIR /app # 将构建的JAR文件复制到容器中 COPY target/demo-0.0.1-SNAPSHOT.jar app.jar # 暴露端口 EXPOSE 8080 # 运行应用 ENTRYPOINT ["java", "-jar", "app.jar"] 

5.2 解释Dockerfile

  • FROM openjdk:8-jdk-alpine:指定基础镜像为OpenJDK 8的Alpine版本,这是一个轻量级的Linux发行版。
  • WORKDIR /app:设置工作目录为/app,后续的命令将在这个目录下执行。
  • COPY target/demo-0.0.1-SNAPSHOT.jar app.jar:将构建的JAR文件复制到容器中,并重命名为app.jar
  • EXPOSE 8080:暴露容器的8080端口,Spring Boot应用默认监听这个端口。
  • ENTRYPOINT [“java”, “-jar”, “app.jar”]:指定容器启动时执行的命令,即运行Spring Boot应用。

6. 构建Docker镜像

在创建了Dockerfile之后,接下来我们需要使用Docker命令来构建镜像。

6.1 构建镜像

在项目根目录下运行以下命令:

docker build -t demo-app . 
  • -t demo-app:指定镜像的名称为demo-app
  • .:指定Dockerfile所在的目录为当前目录。

6.2 查看镜像

构建完成后,你可以使用以下命令查看本地镜像列表:

docker images 

你应该会看到类似以下的输出:

REPOSITORY TAG IMAGE ID CREATED SIZE demo-app latest 1234567890ab 1 minute ago 123MB 

7. 运行Docker容器

在构建了Docker镜像之后,接下来我们可以运行一个容器来启动Spring Boot应用。

7.1 运行容器

使用以下命令运行容器:

docker run -p 8080:8080 demo-app 
  • -p 8080:8080:将主机的8080端口映射到容器的8080端口。
  • demo-app:指定要运行的镜像名称。

7.2 访问应用

在浏览器中访问http://localhost:8080/hello,你应该会看到“Hello, Docker!”的响应。

8. 优化Docker镜像

虽然我们已经成功构建并运行了Docker镜像,但我们可以进一步优化镜像的大小和性能。

8.1 使用多阶段构建

多阶段构建是一种优化Docker镜像大小的技术。它允许我们在一个Dockerfile中使用多个FROM指令,每个阶段可以使用不同的基础镜像,并且只有最后一个阶段的内容会被包含在最终的镜像中。

修改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"] 

8.2 解释多阶段构建

  • 第一阶段:使用Maven镜像来构建Spring Boot应用,生成JAR文件。
  • 第二阶段:使用OpenJDK镜像来运行应用,只复制第一阶段生成的JAR文件。

8.3 重新构建镜像

运行以下命令重新构建镜像:

docker build -t demo-app . 

8.4 查看镜像大小

使用以下命令查看镜像大小:

docker images 

你应该会看到镜像大小有所减小。

9. 使用Docker Compose管理容器

在实际开发中,我们通常需要管理多个容器。Docker Compose是一个工具,允许我们使用YAML文件来定义和运行多个容器的应用。

9.1 创建docker-compose.yml文件

在项目根目录下创建一个名为docker-compose.yml的文件,并添加以下内容:

version: '3' services: app: image: demo-app build: . ports: - "8080:8080" 

9.2 启动应用

在项目根目录下运行以下命令:

docker-compose up 

9.3 停止应用

使用以下命令停止应用:

docker-compose down 

10. 总结

通过本文,我们详细介绍了如何将一个Spring Boot 2.3应用制作成Docker镜像,并部署到Docker容器中。我们还探讨了如何优化Docker镜像的大小和性能,以及如何使用Docker Compose来管理多个容器。希望这些内容能够帮助你在实际项目中更好地使用Docker和Spring Boot。

11. 参考资料


作者: [Your Name]
日期: [Date]
版本: 1.0

向AI问一下细节

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

AI