欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

2024/10/24 4:49:41 来源:https://blog.csdn.net/liuyuyefz/article/details/140311628  浏览:    关键词:SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

前述:

 本篇教程将略过很多docker下载环境配置的基础步骤,如果您对docker不太熟悉请参考我的上一个教程:SpringBoot新手快速入门系列教程九:基于docker容器,部署一个简单的项目

使用 Docker Compose 支持部署 Docker 项目有许多优势,

对比:使用 Docker 和 Docker Compose

功能DockerDocker Compose
单一容器管理良好,使用 Dockerfile 和 docker run良好,但通常用于多容器管理
多容器管理较繁琐,需要手动管理各个容器优秀,使用 docker-compose.yml 文件
服务依赖管理手动设置依赖关系和启动顺序自动管理依赖关系和启动顺序
配置和环境管理使用环境变量和配置文件使用环境变量和配置文件,统一管理
扩展和缩放手动扩展,使用 docker run简单扩展,使用 docker-compose up --scale

另外对于分布式的 Spring Boot 应用,建议使用 Docker Compose 来管理多个服务。虽然仅使用 Docker 也可以实现,但 Docker Compose 提供了更多的便利性和简化操作,特别是当涉及到多个相互依赖的服务时。以下是原因及如何使用 Docker Compose 来构建分布式 Spring Boot 应用的详细步骤:

使用 Docker Compose 的优势

  1. 简化多容器管理:通过一个简单的 docker-compose.yml 文件定义所有服务,使用一个命令即可启动或停止整个应用。
  2. 服务依赖管理:可以定义服务之间的依赖关系,确保按顺序启动。
  3. 统一网络管理:所有服务自动加入同一个网络,方便服务之间的通信。
  4. 环境变量和配置管理:可以在 docker-compose.yml 文件中统一管理环境变量和配置。
  5. 易于扩展和缩放:可以简单地通过调整 docker-compose.yml 文件扩展服务实例数量。

步骤一:新建基于Docker Compose的项目

选择依赖

步骤二:代码示例

1. 创建实体类

src/main/java/com/yuye/www/hellodockeradv/entity 目录下创建 User.java 文件:

package com.yuye.www.hellodockeradv.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

2,创建Repository接口

src/main/java/com/yuye/www/hellodockeradv/repository 目录下创建 UserRepository.java 文件:

package com.yuye.www.hellodockeradv.repository;import com.yuye.www.hellodockeradv.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;import java.util.Optional;public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByName(String name);boolean existsByName(String name);
}

3,创建Controller

src/main/java/com/yuye/www/hellodockeradv/controller 目录下创建 UserController.java 文件:

package com.yuye.www.hellodockeradv.controller;import com.yuye.www.hellodockeradv.entity.User;
import com.yuye.www.hellodockeradv.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Optional;@RestController
public class UserController {@Autowiredprivate UserRepository userRepository;@GetMapping("/register")public String registerUser(@RequestParam String name) {// Check if a user with the same name already existsif (userRepository.existsByName(name)) {return "User already exists";}// If user doesn't exist, create a new user and save to the databaseUser user = new User();user.setName(name);userRepository.save(user);return "User registered successfully";}@GetMapping("/login")public String loginUser(@RequestParam String name) {Optional<User> user = userRepository.findByName(name);if (user.isPresent()) {return "User found: " + name;} else {return "User not found";}}
}

4. 配置 application.properties 文件

src/main/resources/application.properties 文件中添加MySQL数据库连接配置

spring.application.name=HelloDockerAdv
spring.datasource.url=jdbc:mysql://localhost:3306/userdata?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=Qwerty123
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialectserver.port=8081

5. 创建 Dockerfile

在项目根目录下创建一个 Dockerfile 文件:

# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:17-jdk-slim# 添加一个环境变量来指示Spring Boot使用哪个端口
ENV SERVER_PORT=8080# 将jar包添加到容器中
COPY build/libs/HelloDockerAdv-0.0.1-SNAPSHOT.jar app.jar# 暴露应用程序的端口
EXPOSE 8080# 运行jar包
ENTRYPOINT ["java", "-jar", "/app.jar"]

6. 创建 docker-compose.yml 文件

在项目根目录下创建一个 docker-compose.yml 文件:

version: '3.8'
services:app:image: hellodockeradvbuild:context: .dockerfile: Dockerfileports:- "8080:8080"depends_on:- mysqlenvironment:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/demoSPRING_DATASOURCE_USERNAME: rootSPRING_DATASOURCE_PASSWORD: yourpasswordmysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: yourpasswordMYSQL_DATABASE: demoports:- "3306:3306"volumes:- mysql-data:/var/lib/mysqlvolumes:mysql-data:

7. 构建和运行Docker容器

确定你的mysql数据库有一个

userdata

和一个user的表

然后启动mysql后

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

# 构建Spring Boot应用程序
./gradlew build# 启动Docker Compose,构建并运行所有服务
docker-compose up --build

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com