docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端分离版为例

news2024/11/22 16:32:14

场景

若依前后端分离版手把手教你本地搭建环境并运行项目:

若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客_前后端分离的项目怎么运行

上面在搭建起来前后端分离版的项目后。

如果想通过Dockerfile的方式部署项目可以参考如下。

Docker中使用Dockerfile的方式部署SpringBoot+Vue前后端分离的项目(若依前后端分离框架为例):

Docker中使用Dockerfile的方式部署SpringBoot+Vue前后端分离的项目(若依前后端分离框架为例)_霸道流氓气质的博客-CSDN博客_若依 dockerfile

除此之外,还可以使用docker-compose的方式去编排部署各个服务。

docker-compose

简介

Overview | Docker Documentation

docker-compose是基于docker的开源项目,托管于github上,由python实现,

调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,

来定义一组相关的容器来为一个项目服务。

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

快速编排:站在项目角度将一组相关联容器整合在一起,对这组容器按照指定顺序进行启动。

Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。这里涉及2个重要的概念:

服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

项目名称

Compose 用项目名称来隔离不同的环境,在没有设置项目名称的情况下,

Compose 会用 docker-compose.yml 文件所在根目录名称做为项目名称。

每个项目有自己的 Docker network,不同项目的 Docker network 彼此不通。

在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。

您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。

您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。

默认项目目录是 Compose 文件的基本目录。可以使用–project-directory 命令行选项自定义项目目录。

Compose与Docker的兼容性

 

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、确保服务器已经安装Docker以及Compose,可通过

docker --version

docker-compose --version

2、在服务器上新建如下目录

首先新建fzysShow目录,作为项目所在目录以及项目名称,然后进入该目录,创建如下目录以及文件

docker-compose.yml文件

java目录,目录下存放后台服务fzys.jar包

mysql目录,目录下新建data目录,作为数据挂载目录

nginx目录,目录下新建config目录,config目录下新建nginx.conf配置文件;新建font目录,目录下存放dist前端打的包;新建log目录,映射挂载日志目录。

redis目录,目录下新建data目录和redis.conf配置文件。

 

3、修改docker-compose.yml的内容为

version: "3.8"

services:

  redis:
    image: redis:latest
    restart: always
    ports:
      - "36379:6379"
    volumes:
      - ./redis/redis.conf:/etc/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /etc/redis/redis.conf
  mysql:
    image: mysql:latest
    restart: always
    ports:
      - "33306:3306"
    command: --lower_case_table_names=1
    environment:
      MYSQL_DATABASE: fzys-show
      MYSQL_ROOT_PASSWORD: Fzys@123!
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
    volumes:
      - ./mysql/data:/var/lib/mysql

  kkfileview:
    image: zjblovewl/kkfile:4.9
    ports:
      - "38012:8012"

  nginx:
    image: nginx:latest
    ports:
      - "390:390"
    volumes:
      - ./nginx/font/dist:/usr/share/nginx/dist
      - ./nginx/log:/var/log/nginx
      - ./nginx/config/nginx.conf:/etc/nginx/nginx.conf

  java:
    image: openjdk:8u342-oracle
    restart: always
    volumes:
      - ./java:/home
    working_dir: /home/
    ports:
      - "39090:39090"
      - "38901:8901"
    environment:
      TZ: Asia/Shanghai
    depends_on:
      - redis
      - mysql
    command: [
      'java',
      '-jar',
      '/home/fzys.jar'
    ]

配置讲解:

首先声明compose的版本为3.8

然后声明各服务

redis服务:

镜像为redis:latest,端口映射宿主机36379映射到容器6379,数据卷挂载宿主机当前目录下./redis/redis.conf

映射到容器内/etc/redis/redis.conf的配置文件以及数据data目录挂载。执行命令redis-server /etc/redis/redis.conf

使redis通过读取配置文件的方式启动。这里需要注意redis的版本与redis.conf配置文件的版本对应问题,以及

需要赋予宿主机./redis/redis.conf的权限问题。进入到./redis目录下执行

chmod -R 777 redis.conf

 

DockerCompose编排Redis6.2.6以及遇到的那些坑:

DockerCompose编排Redis6.2.6以及遇到的那些坑_霸道流氓气质的博客-CSDN博客

mysql服务:

这里mysql为版本8,所以需要执行command使其忽略表名大小写。然后配置初始化需要的库以及root用户密码和限制访问的

ip等相关环境变量。

kkfileview服务:

这个为系统中用到的文件预览服务,如果用不到可以去掉这个。

nginx服务:

端口映射以及数据卷映射。映射宿主机当前目录下./nginx/font/dist至容器内usr/share/nginx/dist目录,这个就是用来存放前端包的;映射配置文件./nginx/config/nginx.conf:/etc/nginx/nginx.conf。

修改配置文件nginx.conf的内容为:

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }
 
  server {
    listen 390;
    server_name localhost;
    client_max_body_size 300M;
   
    location / {
      root /usr/share/nginx/dist;
      try_files $uri $uri/ /index.html;
      index index.html index.htm;
    }
   
    location /prod-api/ {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://你的服务器ip:39090/;
    }
   
    location /websocket/ {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass       http://你的服务器ip:39090;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade    "websocket";
            proxy_set_header    Connection "Upgrade";
            proxy_read_timeout 5s;
    }
   
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
  }
}

注意:

这里在配置文件中添加了websockt的代理的相关配置,如果不需要可以去掉,只关注反向代理的部分。

 

注意这里映射的目录,前端是容器内的/usr/share/nginx/dist目录,已经在yml中将其映射到宿主机

./nginx/font/dist目录,所以需要将前端项目打包,并上传至宿主机./nginx/font/dist,注意dist目录就是打包后

的目录,不要在dist下再有一层dist目录。

 

可通过本地dist压缩并上传至服务器解压的方式。

java服务:

这里用的jdk的镜像,映射当前目录下./java到容器内home目录下。然后将当前工作目录切换至home目录下,这里端口映射

根据自己的后台服务需要的接口进行映射。depends_on指定java需要依赖redis和mysql这两个服务,避免启动顺序问题。然后

command执行命令,启动jar包。

所以需要将后台jar包上传至宿主机java目录下。

4、yml文件编排完成,需要启动项目并查看日志

来到docker-compose.yml所在的目录下,输入

docker-compose up

启动项目,不加-d参数可以使其不要后台启动,可以直接查看各服务的日志。

此时mysql只是初始化了库并没有导入sql,所以后台java会进行包括,可以先忽略,待mysql启动成功之后

使用客户端工具,将需要的表进行同步结构和数据到服务器上即可。

当然mysql还可以通过dockerfile以及脚本的方式导入sql文件,但是这里需要将部分表的接口以及部分表的数据

同步到服务器上,所以没有初始化sql,而是选择手动传输数据库表和数据的方式。

同步完数据库之后,按ctrl+c可以结束所有服务,停掉整个项目,再输入一遍

docker-compose up

此时后台不再报错,各服务均启动正常。

也可以单独针对一个项目中某个服务进行重启,比如需要更新前端dist包,只要将原来宿主机下

./nginx/font/dist的dist删除并上传最新的dist包,然后重启nginx服务。

docker-compose restart nginx

 

5、docker-compose常用命令

docker compose ps

可以列出「当前项目」下所有的服务

docker compose build

格式:docker compose build [SERVICE...] 构建 docker-compose.yml文件中的服务,生成镜像。

docker compose up

启动的容器都在前台,控制台将实时打印所有容器的输出信息(以不同的颜色标识不同的服务),

可以很方便进行调试。当按下 Ctrl+C 时,所有容器都会被停止。

如果使用 docker compose up -d,则所有服务将在后台启动。

docker compose stop

停止项目中的所有服务容器。

docker compose start

启动项目中的所有服务容器。

docker compose restart

重启项目中的所有服务容器。

注意上面的启动、停止、重启都可以后面跟具体的服务名,进而对单个服务进行操作。

docker compose down

此命令将会『停止并删除』docker-compose.yml中定义的所有服务容器和网络,但保留数据卷。

docker compose logs

查看当前项目下所有服务容器的日志输出。也可跟具体服务名。

6、查看当前项目服务运行状态是否正常

状态均为Up,各服务启动成功

 然后访问服务器的390端口,显示系统页面并出现验证码,则部署成功。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

沃尔玛账号被冻结后如何进行申诉?

目前申请一个沃尔玛店铺并不容易,但仍有不少卖家因为操作不当导致账号被冻结封禁,这对于国内的卖家来说是巨大的损失。那么要如何避免账号被冻结,冻结后又该如何申诉呢?如何避免账号被冻结? 一、保证店铺表现符合平台标…

纵向分栏

【问题】 I would like to create a table that should be vertical orientation, that means each resultset row should filled from left to right.. Can i achieve this without using crosstab? 【回答】 横向分栏的功能可以先用集算器把数据准备好作为普通报表实现&…

【Python机器学习】多项式回归、K近邻KNN回归的讲解及实战(图文解释 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~ 多项式回归 非线性回归是用一条曲线或者曲面去逼近原始样本在空间中的分布,它“贴近”原始分布的能力一般较线性回归更强。 多项式是由称为不定元的变量和称为系数的常数通过有限次加减法、乘法以及自然数幂次的乘方运…

手把收教你Spring Cloud Alibaba基础教程:使用Sentinel实现接口限流

我们在上面学习了: 手把手教你Spring Cloud Alibaba教程:nacos安装 手把手教你Spring Cloud Alibaba教程:使用nacos实现服务注册与发现 手把手教你Spring Cloud Alibaba教程:使用Nacos作为配置中心 手把手教你Spring Cloud Alibaba教程:使用Nacos作为配置中心 …

最小二乘法拟合直线、曲线

参考文章:马同学马同学提供线性代数,微积分,概率论与数理统计,机器学习等知识讲解https://www.matongxue.com/madocs/818/ C最小二乘法拟合-(线性拟合和多项式拟合)_尘中远的博客-CSDN博客_namespace gsl 最小二乘法—多项式拟合非线性函数…

LeetCode_BFS_DFS_简单_1971.寻找图中是否存在路径

目录1.题目2.思路3.代码实现(Java)1.题目 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 u…

MR案例(2):学生排序(单字段排序、多字段排序)

文章目录一、任务目标1. 准备数据二、实行任务1. 创建Maven项目2. 添加相关依赖3. 创建日志属性文件4. 创建学生实体类5. 创建学生映射器类6. 创建学生归并器类7. 创建学生驱动类8. 启动学生驱动器类,查看结果一、任务目标 MR案例:学生排序(…

【C++】继承与面向对象设计

目录 一、确保public继承塑模出is-a关系 二、避免隐藏继承而来的名称 三、区分接口继承和实现继承 四、考虑virtual函数以外的其他选择 五、不要重新定义继承而来的non-virtual函数 六、不要重新定义继承而来的缺省参数 七、尽量使用复合塑模出has-a 总结 一、确保publ…

【MySQL】Innodb存储引擎之物理存储结构(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

云服务器安装jdk

第一步使用工具连接自己的服务器 连接成功后 在左侧选择需要上传的文件到opt目录 在云服务器的命令行操作界面输入指令 解压,输入jdk按table键自动补全 tar -zxvf 配置环境变量 vim /etc/profile 修改环境变量(具体视安装 java 地址修改) …

计算机毕设Python+Vue学生实验报告管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

jQuery 介绍

文章目录jQuery 介绍介绍下载安装jQuery 介绍 介绍 jQuery本身就是用JavaScript来写的,它只是把JavaScript中最常用的功能封装起来,以方便开发者快速开发。遥想当年,jQuery的创始人John Resig就是受够了JavaScript的各种缺点,所…

微服务框架 SpringCloud微服务架构 服务异步通讯 51 死信交换机 51.1 初识死信交换机

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯51 死信交换机51.1 初识死信交换机51.1.1 初识死信交换机51.1.2 总结51 死信交换机 51.1 初识…

java 多线程 上

目录 基本概念 线程的创建和使用 Thread类 API中创建线程的两种方式 Thread类的有关方法 线程的调度 线程的优先级 总结 基本概念 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process)是程…

TapTap 算法平台的 Serverless 探索之路

作者:陈欣昊 Serverless 在构建应用上为 TapTap 节省了大量的运维与开发人力,在基本没投入基建人力的情况下,直接把我们非常原始的基建,或者说是资源管理水平拉到了业界相对前沿的标准。最直观的数据是,仅投入了个位数…

代码随想录Day55|392.判断子序列、115.不同的子序列

文章目录392.判断子序列115.不同的子序列392.判断子序列 文章讲解:代码随想录 (programmercarl.com) 题目链接:392. 判断子序列 - 力扣(LeetCode) 题目: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。…

koa 使用

(贴个官网,koa 内容真不多,非常的小巧轻量) 1. koa 是什么 一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,…

关于新正方教务系统(湖北工程学院)的one day越权漏洞的说明

关于正方教务系统漏洞的说明 此漏洞基于湖北工程学院教务管理系统进行演示,漏洞覆盖新正方教务系统8.0以下版本,为本人一年前提交的漏洞,所以并非0day漏洞 此漏洞影响范围巨大,几乎涉及国内一半高校的教务系统,包含武…

我国油气行业勘探开发投入提升 石油资源存在供需短缺矛盾 天然气需求高速发展

根据观研报告网发布的《2022年中国油气市场分析报告-市场竞争策略与发展动向前瞻》显示,油气是指石油和伴生的天然气,被誉为“能源之王”、“工业的血液”,是全世界各国的战略性产业。油气资源种类多样,根据开采难度可分为两大类&…

Python:三方库安装路径及路径变更

文章目录一、安装三方库的几种方式二、指定第三方库的镜像源三、查看安装默认路径四、修改安装默认路径五、查看安装的库六、导出库安装文件七、安装小结一、安装三方库的几种方式 1.直接pip install安装(有网的环境下通用) : 在python–>…