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

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Compose通过简化多容器应用的部署和管理,使得开发人员能够更专注于应用程序的开发和测试。

部署SpringBoot

现在我们有一个springboot项目,需要依赖Redis、mysql5.7、nginx。

如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的Docker compose实现容器编排技术。

1、在服务器上创建工作目录

工作目录是用于存放部署所需要的文件等(Dockerfile、jar包、配置文件、静态资源),我这里是在根目录下创建app文件夹,里面内容如下

 2、打包SpringBoot项目并上传到服务器

注意,在SpringBoot项目中的yml文件中,也需要一些小小的改动,如下:

3、编辑需要的Dockerfile文件

本项目一共需要3个,分别是springboot的、nginx、以及mysql,分别如下

3.1、Dockerfile-springboot

#镜像、容器的基础环境,这里是JDK8
FROM kdvolder/jdk8
MAINTAINER zhangb#设置工作目录
WORKDIR /app# 将jar包复制到容器内,注意在dockerfile中,路径都是相对路径,而不是绝对路径 
COPY /projects/SmartCommunities-0.0.1-SNAPSHOT.jar /app/SmartCommunities-0.0.1-SNAPSHOT.jar # 向外暴露端口  
EXPOSE 8383# 定义容器启动时执行的命令  
ENTRYPOINT ["java","-jar","/app/SmartCommunities-0.0.1-SNAPSHOT.jar"]

3.2、Dockerfile-nginx

# 使用官方Nginx镜像作为基础  
FROM nginx:latest
MAINTAINER zhangb# 复制自定义的Nginx配置文件  
COPY /usr/local/nginx/conf/nginx.conf nginx.conf# 复制你的静态文件或其他资源(如果有的话)  
COPY /usr/local/nginx/html /usr/share/nginx/html

对应的nginx配置文件


#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#access_log  logs/access.log  main;sendfile        on;keepalive_timeout  65;server {listen       81;server_name  localhost;charset utf-8;location / {root   html;index  index.html index.htm;}	error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}#项目的静态资源以及后端代理server {listen 80;server_name smartcommunity;location /{root /usr/share/nginx/html;index index.html;}location /prod-api/{proxy_pass http://192.168.235.138:8383/;}}}

nginx所需要的静态资源

存放在app下的html中

3.3、Dockerfile-mysql


MAINTAINER zhangb#/docker-entrypoint-initdb.d/目录下的所有.sh、.sql、.sql.gz文件(取决于具体的数据库镜像)将在数据库初始化时被执行或导入。
#这意味着community-linux.sql中的SQL命令将在数据库容器首次启动时被执行,从而初始化数据库
ADD ./db/communiyu01.sql /docker-entrypoint-initdb.d

4、核心docker-compose.yml文件

注意,yml中的缩进全部都是空格来完成的,如果有tab,会报错

#Docker-compose的版本
version: '3.0'  #编排的服务、容器有哪些
services:  #mysql服务db:#定义容器名称,这里就是之前springboot的yml配置文件中的container_name: db  #所使用的mysql镜像image: mysql:8.0#通过dockerfile-mysql来构建build:context: ./dockerfile: Dockerfile-mysql#解决外部与内部连接的问题command: --default-authentication-plugin=mysql_native_password#数据库的环境environment:#初始化mysql的密码MYSQL_ROOT_PASSWORD: 111111  MYSQL_DATABASE: 'community01'MYSQL_PASSWORD: 111111ports:  - "3306:3306"  #使用的网络,注意,docker中容器的通信需要在同一网络下才能进行通信networks:- communityredis:  image: redis:7.0container_name: redis  ports:  - "6379:6379"  networks:- communityapp:  build:  context: .  dockerfile: Dockerfile-springboot  ports:  - "8383:8383"  depends_on:  - db  networks:- community  nginx:  build:  context: .  dockerfile: Dockerfile-nginx  ports:  - "83:80"  depends_on:  - appnetworks:- community#定义该项目下的容器所使用的网络
networks:  #定义的网络名称community:  #网络类型,桥接模式driver: bridge

同时,关于docker中的容器通信,详看Docker容器间通信详解

5、构建并运行

 

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

相关文章:

  • 大话 RCU (read copy update)
  • vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead
  • 十二、MySQL数据类型精讲
  • 不同参数对分类精度的影响以及思考
  • 开源AI智能名片小程序源码:私域电商构建独特竞争力的新机遇
  • 从Web2到Web3:探索下一代互联网的无限可能性
  • POE供电支持画中画的摄像头解决方案
  • Python 3 字典
  • CFR( Java 反编译器)
  • 单片机的两种看门狗原理解析——IWDG和WWDG
  • SQL进阶技巧:如何获取状态一致的分组? | 最大、最小值法
  • windows10使用bat脚本安装前后端环境之msyql5.7安装配置并重置用户密码
  • 文件上传、amrkdown编辑器
  • Linux防火墙-4表5链
  • (最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网上报温湿度和控制单片机(保姆级教程)
  • 无环SLAM系统集成后端回环检测模块(loop):SC-A-LOAM以及FAST_LIO_SLAM
  • 速盾:视频开cdn合适还是视频点播合适?
  • Mac电脑安装FFmpeg和卸载FFmpeg
  • 数据结构:栈 及其应用
  • 批量发送邮件:性能优化与错误处理深度解析
  • STM32原理知识查询表
  • 从 Kafka 到 WarpStream: 用 MinIO 简化数据流
  • 【Gitee自动化测试4】本地Git分支的增删查,本地Git分支中文件的增删查,本地文件的暂存/提交,本地分支的推送
  • vue-baidu-map的基本使用
  • 策略路由控制选路
  • 【数据结构和算法实践-排序-快速排序】
  • 测试面试题:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
  • 回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出
  • html/css怎么禁用浏览器自动填写
  • 信息安全工程师(22)密码学网络安全应用