Docker 部署 Spring Boot 项目(含 MySQL + Redis )

这篇具有很好参考价值的文章主要介绍了Docker 部署 Spring Boot 项目(含 MySQL + Redis )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意事项:如果需要将 Spring Boot 项目的日志文件挂载到本地,则在打包前需要先在 yml 进行如下配置:

logging:
  file:
    path: /app/logs
  level:
    root: info

这里的 info 指的是日志等级,可以根据需要进行修改,日志等级主要有以下几种:

  1. trace:最低的日志级别,用于记录非常详细的信息,通常仅在诊断问题时使用。
  2. debug:用于调试信息,通常在开发过程中使用。
  3. info:用于显示信息,这些信息是应用程序正常运行所需要的。
  4. warn:用于显示可能的问题或警告信息,这些信息可能会影响应用程序的正常运行。
  5. error:用于显示错误信息,这些信息表明应用程序发生了严重错误。
  6. fatal:最高的日志级别,用于显示致命的错误信息,这些信息表明应用程序无法继续运行。

在生产环境上,一般建议使用以下日志级别:

  1. info:这是默认的日志级别,可以显示应用程序正常运行所需要的必要信息。
  2. error:用于记录错误信息,这些信息表明应用程序发生了严重错误。

根据实际需求,可以进一步调整日志级别,以满足不同的监控和故障排查需求。

1. 创建 Docker 网络

docker network create backend-network

backend-network指的是网络名称,根据自己需要进行更改

2. 启动 MySQL 容器

docker run -d \
	--network backend-network \
	--name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --restart always \
  mysql:5.7 
  • -d:后台运行容器,保证在退出终端后容器继续运行
  • --network:容器使用的网络,这里的名称要跟上面创建的 Docker 网络名称一致,如果未指定网络,通常会使用默认的 bridge 网络
  • –name:容器名,此处命名为mysql
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -e TZ=Asia/Shanghai:配置信息,此处设置了时区为上海
  • -e MYSQL_ROOT_PASSWORD=root:配置信息,此处设置mysql的root用户的登陆密码
  • -v ./mysql/conf:/etc/mysql/conf.d:将宿主机上的 ./mysql/conf 目录挂载到容器的 /etc/mysql/conf.d 目录,在宿主机上修改 MySQL 的配置文件,这些更改会反映到容器内
  • -v ./mysql/data:/var/lib/mysql:将宿主机上的 ./mysql/data 目录挂载到容器的 /var/lib/mysql 目录,这是 MySQL 的数据目录,所有数据库的数据都会存储在这里
  • -v ./mysql/init:/docker-entrypoint-initdb.d:将宿主机上的 ./mysql/init 目录挂载到容器的 /docker-entrypoint-initdb.d 目录,这个目录中的文件会在容器启动时被执行,通常用于初始化数据库或进行其他设置
  • --restart always: 设置容器的重启策略为"总是",表示当容器退出时,它会自动重启
  • mysql:5.7:指定了要运行的 Docker 镜像的名称和标签,即 MySQL 的 5.7 版本

3. 进入容器,设置远程连接

sudo docker exec -it mysql bash

4. 登录MySQL

mysql -uroot -proot
# 添加远程连接用户
alter user 'root'@'%' identified with mysql_native_password by 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
# 刷新权限
flush privileges;

5. 在 root 目录下新建一个 redis 文件夹,再在 redis 文件夹里创建 conf 文件夹和 data 文件夹,并将 Redis 的配置文件放入 conf 文件夹

Docker 部署 Spring Boot 项目(含 MySQL + Redis ),docker,spring boot,mysql,redis

Redis 配置文件内容(仅作参考,根据自己的需求进行更改):

# Redis 配置文件示例

# 网络相关设置
bind 0.0.0.0        # 监听所有网络接口,允许远程连接
port 6379           # Redis 监听的端口
protected-mode no   # 禁用保护模式

# 通用设置
daemonize yes       # 以守护进程方式运行 Redis
pidfile /var/run/redis/redis-server.pid   # PID 文件路径
logfile /var/log/redis/redis-server.log   # 日志文件路径

# 数据库快照
save 900 1          # 如果 900 秒内至少有 1 个键被修改,则保存数据库
save 300 10
save 60 10000

# 认证
# 如果需要密码认证,请取消下一行的注释,并设置一个强密码
# requirepass your_strong_password

# 性能
rdbcompression yes  # 压缩 RDB 文件
maxmemory 2GB       # Redis 可以使用的最大内存量
maxmemory-policy volatile-lru  # 达到 maxmemory 时的淘汰策略
maxclients 10000    # 最大连接客户端数

# 追加写入模式
appendonly yes       # 启用追加写入文件以进行持久化
appendfilename "appendonly.aof"  # 追加写入文件名

# 安全性
# 如果 Redis 在公共网络上,请使用防火墙等其他手段确保安全
# 请注意启用密码认证以保护 Redis 数据

# 快照
stop-writes-on-bgsave-error yes   # 如果最后一次保存失败,则停止所有写入

# 杂项
dir /var/lib/redis   # Redis 工作目录

6. 在命令行进入 root 文件夹,启动 Redis 容器

docker run -d --name redis -p 6379:6379 \
  -v ./redis/conf/redis.conf:/etc/redis/redis.conf \
  -v ./redis/data:/data \
  --network backend-network \
  -e TZ=Asia/Shanghai \
  --restart always \
  redis:5.0 redis-server /etc/redis/redis.conf
  • -d:以后台(detached)模式运行容器。
  • --name redis:将容器命名为 redis
  • -p 6379:6379:将主机的6379端口映射到容器的6379端口
  • -v ./redis/conf/redis.conf:/etc/redis/redis.conf:将本地Redis配置文件 ./redis/conf/redis.conf 挂载到容器内的 /etc/redis/redis.conf 文件
  • -v ./redis/data:/data:将本地目录 ./redis/data 挂载到容器内的 /data 目录,通常用于持久化Redis数据
  • --network backend-network:将容器连接到名为 backend-network 的 Docker 网络
  • -e TZ=Asia/Shanghai:设置容器的时区为亚洲/上海
  • --restart always:配置容器始终自动重启,除非显式停止
  • redis:5.0:使用Docker Hub上的Redis 5.0版本镜像
  • redis-server /etc/redis/redis.conf:指定在容器内运行的命令,即使用提供的配置文件启动Redis服务器

7. 编写 Dockerfile 文件

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 暴露9090端口
EXPOSE 9090
# 拷贝jar包,这里的jar包名需要根据实际情况进行修改
COPY spring-boot-router-0.0.1-SNAPSHOT.jar /app.jar 
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

8. 在 root 目录下新建一个 springboot 文件夹,将打包好的 jar 包和 Dockerfile 文件放到 springboot 文件夹下

Docker 部署 Spring Boot 项目(含 MySQL + Redis ),docker,spring boot,mysql,redis

9. 在命令行进入 springboot 文件夹,执行命令构建镜像

docker build -t spring-boot-router .
  • -t spring-boot-router-t选项用于为新的Docker镜像指定一个标签(tag),这里给新镜像指定了标签名spring-boot-router
  • .:这表示Dockerfile的位置,.表示Dockerfile在当前目录下

10. 启动 Spring Boot 容器

docker run -d --network backend-network --name spring-boot-router -p 9090:9090 -v ./log:/app/logs --restart always spring-boot-router
  • -d: 后台运行容器,保证在退出终端后容器继续运行
  • --network: 为容器指定一个网络,这里指定的网络是backend-network,要跟上面创建的 Docker 网络名称一致
  • --name: 为容器指定一个名称,这里指定的名称是spring-boot-router
  • -p: 将容器内的9090端口映射到宿主机的9090端口,这样就可以通过宿主机的9090端口访问容器内的服务
  • -v ./log:/app/logs:将当前目录下的log文件夹挂载到容器内的/app/logs路径,即容器内的/app/logs路径下的文件和当前目录下的log文件夹下的文件是共享的,如果不需要保存日志文件,可以不加这个选项
  • --restart always: 设置容器的重启策略为"总是",表示当容器退出时,它会自动重启
  • spring-boot-router: 运行的 Docker 镜像的名称

启动完成后就可以使用服务器 IP 和端口去发起请求文章来源地址https://www.toymoban.com/news/detail-810987.html

到了这里,关于Docker 部署 Spring Boot 项目(含 MySQL + Redis )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker和Kubernetes部署Spring Boot项目:如何灵活修改配置文件?

      大家好,我是G探险者,今天我们来聊一下通过容器化部署的springboot项目,如何灵活的修改配置文件。 有同事问我,我们的springboot项目是容器化部署,使用的是K8S容器编排平台,部署上去后,修改项目里面的配置不太方便,还需要进入到容器内部进行修改,太麻烦了,怎么

    2024年02月10日
    浏览(43)
  • 一文看懂 win 10安装docker并部署spring boot项目

    目录 1、下载docker安装包 2、win 10环境准备 3、安装Docker Desktop 4、验证Docker安装 5、部署spring boot项目  5.1、pom.xml中添加docker依赖 5.2、添加Dockerfile文件 5.3、镜像文件 5.4、验证 Docker Desktop是Docker在win 10操作系统上的安装方式,首先到Docker Desktop官网下载安装包,安装地址Instal

    2024年02月07日
    浏览(56)
  • Jenkins + Docker 一键自动化部署 Spring Boot 项目,步骤齐全,少走坑路!

    本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。 环境 :centos7+git(gitee) 简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。 推荐一个开源免费的 Spring Boot 实战项目: https://git

    2024年02月08日
    浏览(69)
  • [AIGC] Spring Boot Docker 部署指南

    近年来,容器化部署成为了越来越流行的部署方式。Docker 是目前最受欢迎的容器化平台之一,它提供了一种将应用程序与其依赖项打包在一起,并以容器的形式运行的方法。Spring Boot 是一种用于快速开发和微服务架构的框架,它与 Docker 结合使用可以简化应用的部署和管理过

    2024年01月17日
    浏览(58)
  • 【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解

    本文将为您详细介绍如何在Docker容器中部署Spring Boot服务。 首先,您需要为您的Spring Boot应用程序创建一个 Docker镜像 。然后将镜像在Docker容器中运行起来即可 提示:以下是本篇文章正文内容,下面案例可供参考 这个Dockerfile文件使用alpine Linux操作系统和OpenJDK 8图像作为基础映

    2024年02月16日
    浏览(47)
  • IDEA 集成 Docker 插件一键部署 Spring Boot 应用

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! 随着容器化技术的崛起,Docker成为了现代软件开发的关键工具。在Java开发中,Spring Boot是一款备受

    2024年02月05日
    浏览(46)
  • 使用Spring Boot和Docker快速部署Java应用程序

    随着微服务的兴起,容器化技术已成为现代应用程序开发和部署的关键部分。Docker作为一种流行的容器化解决方案,广泛应用于企业和开发者社区。与此同时,Spring Boot作为一种优秀的Java开发框架,大大简化了基于Spring的应用程序开发。在本文中,我们将探讨如何将Spring Bo

    2024年02月01日
    浏览(62)
  • Spring Boot与Docker的完美融合:从开发到部署的实战

    一、Spring Boot与Docker简介 Spring Boot框架特点与优势概述 Spring Boot 是一个由Pivotal团队开发的用于简化新Spring应用初始搭建以及开发过程的框架。它的核心特点和优势包括: 简化配置 :Spring Boot采用约定优于配置的方式,减少了大量的XML配置工作,通过自动配置功能极大地加速

    2024年04月26日
    浏览(42)
  • Spring Boot实践 --windows环境下 K8s 部署 Docker

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),用社区版就可以了。 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统

    2024年02月06日
    浏览(53)
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb

    可以到 https://hub.docker.com/ 去搜索node镜像 , 然后下载,也可以直接通过docker pull node下载镜像,然后用这个node镜像启动容器node,这样系统就集成了node服务了,在这里挂载www/node目录到容器中,并指定端口映射,运行nodejs程序,安装npm,以及对应的依赖,启动node目录下对应的项目,然后通过浏

    2024年02月06日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包