做电子商务系统网站,网络新闻专题做的最好的网站,水利网站建设管理汇报,网站群项目建设实施进度计划前述#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤#xff0c;如果您对docker不太熟悉请参考我的上一个教程#xff1a;SpringBoot新手快速入门系列教程九#xff1a;基于docker容器#xff0c;部署一个简单的项目
使用 Docker Compose 支持部署 Docker 项…前述 本篇教程将略过很多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 的优势
简化多容器管理通过一个简单的 docker-compose.yml 文件定义所有服务使用一个命令即可启动或停止整个应用。服务依赖管理可以定义服务之间的依赖关系确保按顺序启动。统一网络管理所有服务自动加入同一个网络方便服务之间的通信。环境变量和配置管理可以在 docker-compose.yml 文件中统一管理环境变量和配置。易于扩展和缩放可以简单地通过调整 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 {IdGeneratedValue(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 JpaRepositoryUser, Long {OptionalUser 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 doesnt 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) {OptionalUser 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.nameHelloDockerAdv
spring.datasource.urljdbc:mysql://localhost:3306/userdata?useSSLfalseserverTimezoneUTC
spring.datasource.usernameroot
spring.datasource.passwordQwerty123
spring.jpa.hibernate.ddl-autoupdate
spring.jpa.show-sqltrue
spring.jpa.properties.hibernate.dialectorg.hibernate.dialect.MySQLDialectserver.port8081
5. 创建 Dockerfile
在项目根目录下创建一个 Dockerfile 文件
# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:17-jdk-slim# 添加一个环境变量来指示Spring Boot使用哪个端口
ENV SERVER_PORT8080# 将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:8080depends_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:3306volumes:- mysql-data:/var/lib/mysqlvolumes:mysql-data:7. 构建和运行Docker容器
确定你的mysql数据库有一个
userdata
和一个user的表
然后启动mysql后
在项目根目录下运行以下命令
# 构建Spring Boot应用程序
./gradlew build# 启动Docker Compose构建并运行所有服务
docker-compose up --build