当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/398167.html

相关文章:

  • websocket中的STOMP 协议:sockjs-client 和 stompjs
  • 阿里云API安全2.0全新发布
  • 学习网络的第一步:全面解析OSI与TCP/IP模型
  • 鸿蒙语言基础类库:【@ohos.util (util工具函数)】
  • CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成
  • 中关村软件园发布“数据合规与出境评估服务平台”
  • 记一次若依框架和Springboot常见报错的实战漏洞挖掘
  • Idea合并Git分支信息
  • 【学习css2】grid布局-页面footer部分保持在网页底部
  • Django 表单
  • 【Linux网络】网络基础
  • Open3D 可视化点云配准中匹配点之间的连线
  • Linux编程第三篇:Linux简介,开源软件简介(Linux是否安全?参考TESEC指标)
  • 【JavaSE复习】数据结构、集合
  • Java版Flink使用指南——自定义无界流生成器
  • Vue3框架搭建4:配置说明-eslint配置
  • JavaFx+MySql学生管理系统
  • Java--抽象类
  • 26.Labview波形图、XY图、强度图使用精讲
  • 系统启动 | 安全启动时 “地址线” 被篡改了怎么办?
  • Kafka基础组件图推演
  • k8s中使用cert-manager生成自签名证书
  • 处于群晖Docker中的HomeAssistant监控宿主机CPU温度
  • STM32串口工作原理
  • STM32杂交版(HAL库、音乐盒、闹钟、点阵屏、温湿度)
  • 多输入多输出 | Matlab实现Transformer多输入多输出预测
  • Linux文件编程(标准C库)
  • 生产英特尔CPU处理器繁忙的一天
  • MVC拦截器、ThreadLocal来进行登录拦截
  • 小程序问题