侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 292 篇文章
  • 累计创建 132 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker教程-11-Docker Compose搭建部署SpringBoot项目

孔子说JAVA
2021-10-29 / 0 评论 / 0 点赞 / 125 阅读 / 16,445 字 / 正在检测是否收录...

本文介绍如何使用 docker-compose 部署Vue+SpringBoot 前后端分离项目,涉及 Redis、Mysql、Nginx环境,前端使用 Nginx 代理请求转发到后端 Spring Boot 内嵌的 Tomcat 服务,Mysql 负责业务中数据相关的交互存储。

1、使用Docker前后对比

在没有使用Docker之前,我们需要通过以下4个步骤进行部署,且每迁移到一个新的环境,都需要按以下步骤重新进行一次。如果还涉及到MongoDB、ES … 一系列的环境,则需要更多的时间去安装配置服务器环境信息,还有可能因为一些参数的配置问题导致服务跑不起来。

  1. 安装 Nginx,配置 Nginx 相关信息,重启。
  2. 安装 Redis,配置 Redis 相关信息,重启。
  3. 安装 Mysql ,配置字符集时区等信息,重启,最后初始化脚本。
  4. 启动 Spring Boot 项目,整体进行联调测试。

如果使用Docker,Dockerfile可以让用户管理一个单独的应用容器,Docker Compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个web服务容器再加上redis服务容器,nginx服务容器等,这样我们就可以通过几条简单的语句来快速部署项目。使用Docker Compose的步骤如下:

  1. 使用Dockerfile定义应用程序环境,一般需要修改初始镜像行为时才需要使用;
  2. 使用docker-compose.yml定义需要部署的应用程序服务,以便执行脚本一次性部署;
  3. 使用docker-compose up命令将所有应用服务一次性部署起来。

可以根据官网案例体验docker-compose编排过程:https://docs.docker.com/compose/gettingstarted/

2、安装Docker Compose

查看是否已经安装成功Docker Compose,若没有安装,参考《Docker教程-10-Docker Compose使用入门》

docker-compose --version

cec7146c23124929aaec80bc2a260f38

3、相关概念

3.1 容器

作为最小单位,一个容器代表着一个应用。

3.2 服务

每个服务中定义了容器描述、端口映射、配置映射以及依赖关系;一个服务可以实例出多个容器。

3.3 工程

每个工程中包含了多个服务。

注:在本次部署中,有一个工程,包括四个服务:SpringBoot、Redis、MySQL 以及 Nginx。

4、划分目录结构

在服务器上创建app目录,划分docker配置目录及应用部署目录。可以通过 tree -d app 命令查看app下的树型目录结构,通过tree app可以查看包括文件在内的树型结构。(参数-L level可以指定目录显示层级数,如 tree -L 2 app

b0413ddac71b4f6e857c9b963c9f2ba5 (1)

5、创建Docker配置文件

在app/docker/bsp目录下新增 Dockerfile-api、Dockerfile-web、docker-compose.yml 配置文件。其中 Dockerfile-api 表示后端Docker配置文件,Dockerfile-web表示前端Docker配置文件,docker-compose.yml为docker-compose 的核心文件,描述如何构建整个服务(即用于编排容器执行顺序,相对于一个一个docker run方式运行项目更方便),jdk-8u291-linux-x64.tar.gz为后端Docker容器所需的文件。

0193c96f812a499d93cb9841286fb01c

docker配置目录划分:

b1945057d5d64444a90c0c3cd5d34861

5.1 springboot后端所需docker配置Dockerfile-api

该配置文件为springboot生成对应的部署环境镜像。

# 指定操作的基础镜像
FROM ubuntu:20.04

# 维护者信息
MAINTAINER kongzi<153957433@qq.com>

RUN echo "--------------- api环境配置 ---------------"

# 将 jdk 添加到镜像ubuntu:20.04的/usr/local/目录下,ADD 命令会自动解压 将tar包解压到这个路径
ADD jdk-8u291-linux-x64.tar.gz /usr/local/

# 设置默认工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH

# 通过ENV来设置各种环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_291
ENV JRE_HOME=/usr/local/jdk1.8.0_291/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ENV PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
ENV export JAVA_HOME JRE_HOME CLASSPATH PATH

# TZ在这里可以不设置,在容器启动的时候通过参数指定
ENV TZ="Asia/Shanghai"

# 暴露8080端口
EXPOSE 8080

# 设置环境编码UTF-8
ENV LANG C.UTF-8

# 可以将bsp-admin.jar加入到镜像中,该例采用挂载的方式,注释掉此处
#ADD bsp-admin.jar bsp-admin.jar

# 运行 - 配置容器,使其可执行化,-Djava.security.egd的作用是修改 Tomcat 随机数生成方式,加快 Tomcat 启动
# ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "-Dloader.path=./lib", "bsp-admin.jar", "--spring.profiles.active=dev"]
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "-Dloader.path=./lib", "bsp-admin.jar"]

5.2 前端所需docker配置Dockerfile-web

6、docker-compose.yml构建整个服务

此文件的默认名称为 docker-compose,后缀名可以为 .yml, 也可以为 .yaml。这个 docker-compose.yml 文件对应的就是上面所说的工程。文件结构如下:

# 构建文件的语法版本信息。version: '3' 表示使用第三代语法。
version: '3'

# 服务列表
services:
    # redis服务名称
    service_redis:
        ...

    # mysql服务名称
    service_mysql:
        ...
    
    # springboot服务名称
    service_springboot:
        ...

    # nginx服务名称
    service_nginx:
        ...
  • 服务可以是已存在的镜像(本地或远程),也可以是构建出来的镜像;如果其中有需要构建的镜像,则需要一个 Dockerfile 文件,正如此次部署我们需要构建 Springboot 镜像Dockerfile-api。

6.1 redis 服务配置

6.1.1 redis服务配置

  service_redis:                            # redis服务
    image: redis:6.2.6                      # redis镜像名
    container_name: container_redis6.2.6    # 容器名为container_redis6.2.6
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf  #redis配置文件挂载目录
      - ./data/redis/:/data/                #redis数据文件挂载目录
      - ./log/redis/:/var/log/redis/        #redis日志文件挂载目录
      - /etc/localtime:/etc/localtime       # 容器时间与宿主机同步
    ports:                                  # 映射端口,容器互连用6379端口
      - "6380:6379"
    command: redis-server /usr/local/etc/redis/redis.conf # 启动redis服务命令
    restart: always
    # networks:
    #  - appnet

Redis 服务描述:

  • service_redis:服务名称,可自定义。
  • image:指定镜像来启动容器,如果本地不存在,从docker hub下载。此处指定为 Redis 官方镜像,版本为 6.2.6。
  • container_name:容器名称,可自定义;不写会自动生成,生成规则为 【docker-compose.yml 文件的父目录名称 + _ + 服务名称 + 从1开始的数字】。
  • environment:为启动的容器添加环境变量。此处配置了容器的时区。
  • volumes:配置映射,映射规则为 宿主机:容器,可以映射文件或目录。此处映射了 配置文件,数据目录以及日志目录。
  • ports:端口映射,映射规则为 宿主机端口:容器端口。此处映射 宿主机 6380 端口到 容器 6379 端口,注意容器之间互连的时候要使用6379端口
  • command:容器启动后执行的命令。此处命令使用配置文件来启动 Redis 容器。
  • restart:赋固定值 always,表示如果容器启动失败,会一直尝试重连。
  • networks:加入指定网络(未使用)。

6.1.2 redis挂载目录及配置

9fa835c8cfd8456397d03b064a3b493a

redis.conf配置

# 端口
port 6379
# RDB相关配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
# 数据目录
dir /data
# AOF相关配置
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 密码
requirepass 111111

6.2 mysql 服务配置

6.2.1 mysql服务配置

  service_mysql:                            # mysql服务
    image: mysql:5.7.17                     # mysql镜像名
    container_name: container_mysql5.7.17   # 容器名为container_mysql5.7.17
    environment:
      TZ: Asia/Shanghai                     # 容器的时区
      MYSQL_ROOT_PASSWORD: 111111           # 数据库 ROOT 密码、权限、数据库名称、数据库用户、数据库用户密码
      MYSQL_ROOT_HOST: '%'                  # 权限、数据库名称、数据库用户、数据库用户密码
      MYSQL_DATABASE: 'bspvue'              # 数据库名称、数据库用户、数据库用户密码
      MYSQL_USER: 'bsp'                     # 数据库用户
      MYSQL_PASSWORD: 111111                # 数据库用户密码
    volumes:
      #- ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf  # mysql配置文件挂载目录
      - ./data/mysql/:/var/lib/mysql/              # mysql数据挂载目录
      - ./data/init/:/docker-entrypoint-initdb.d/  # mysql初始化脚本目录,只存放1个init.sql脚本,多个脚本无法保证按顺序执行
      - ./data/sql/:/opt/sql/                      # mysql脚本目录,通过初始化脚本init.sql按顺序执行该目录下的脚本
      - ./log/mysql/:/var/log/mysql/               # mysql日志挂载目录
      - /etc/localtime:/etc/localtime              # 容器时间与宿主机同步
    command: [
      '--server_id=100',
      '--log-bin=mysql-bin',
      '--sync_binlog=1',
      '--binlog-ignore-db=mysql',
      '--binlog_format=mixed',
      '--expire_logs_days=7',
      '--default-authentication-plugin=mysql_native_password',   #mysql5.7及以上 版本 默认连接方式 不是以密码形式连接 所以远程连接不方便 改为密码连接
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_general_ci',
      '--explicit_defaults_for_timestamp=true',
      '--lower_case_table_names=1',                               # 表名不区分大小写
      '--max_allowed_packet=128M',
      '--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    ]
    ports:
      - "3306:3306"
    restart: always
    #networks:
    #  - appnet

MySQL 服务描述:

  • service_mysql:服务名称,可自定义。数据库连接时使用的名称(相当于ip)。
  • image:指定镜像来启动容器,如果本地不存在,从docker hub下载。此处指定为 MySql 官方镜像,版本为 5.7.17。
  • container_name:容器名称,可自定义;不写会自动生成,生成规则为 【docker-compose.yml 文件的父目录名称 + _ + 服务名称 + 从1开始的数字】。
  • environment:为启动的容器添加环境变量。此处配置了容器的时区,以及数据库 ROOT 密码、权限、数据库名称、数据库用户、数据库用户密码。
  • volumes:配置映射,映射规则为 宿主机:容器,映射本地目录下的配置文件到容器指定地址下。这里映射了配置文件(注释了,该例未使用),数据目录,初始化脚本目录,数据脚本目录,日志目录以及容器时间与宿主机同步。
  • ports:端口映射,映射规则为 宿主机端口:容器端口。此处映射 宿主机 3306 端口到 容器 3306 端口。
  • command:容器启动后执行的命令。此处命令为设置字符编码等。
  • restart:赋固定值 always,表示如果容器启动失败,会一直尝试重连。
  • networks:加入指定网络(未使用)。

注意1:若数据挂载目录data/mysql/下有文件(宿主主机的文件夹),容器无法初始化数据库脚本,所以如果使用挂载目录的方式创建mysql服务,需要保证这个文件夹里面是空的(里面有.gitignore等隐藏文件没事)。

注意2:mysql初始化脚本目录- ./data/init/:/docker-entrypoint-initdb.d/,如果放置多个文件,执行时是没有顺序的,为了保证多个脚本的顺序执行,此目录只存放一个init.sql文件,,专门用来控制执行sql顺序的。mysql脚本目录 - ./data/sql/:/opt/sql/ 存放所有的初始化数据脚本,通过初始化脚本目录下的init.sql按顺序执行该目录下的脚本。

6.2.2 mysql挂载目录及配置

7bf8b57ad35e41b9bccb8ac5aa986595

docker/bsp/data/init/init.sql

source /opt/sql/v1.0.0_schema.sql;
source /opt/sql/v1.0.1_ry_20210731.sql;
source /opt/sql/v1.0.2_quartz.sql;
source /opt/sql/v1.0.3_bsp_20210812.sql;
source /opt/sql/v1.0.4_bsp_20211012_baseapi.sql;
source /opt/sql/v1.0.4_bsp_menu_baseapi.sql;
source /opt/sql/v1.0.5_bsp_20211103_basedata.sql;
source /opt/sql/v1.0.6_bsp_20211111_localbase.sql;
source /opt/sql/v1.0.7_bsp_20211112_config.sql;
source /opt/sql/v1.0.7_bsp_menu_config.sql;
source /opt/sql/v1.0.8_config_module.sql;
source /opt/sql/v1.0.8_config_module_cond.sql;
source /opt/sql/v1.0.8_config_module_result.sql;

docker/bsp/data/sql/v1.0.0_schema.sql

-- 创建数据库
DROP database IF EXISTS `bspvue`;
CREATE DATABASE `bspvue` default character set utf8mb4 collate utf8mb4_unicode_ci;

flush privileges;

-- 切换数据库
USE bspvue;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

docker/bsp/data/sql/v1.0.1_ry_20210731.sql

-- ----------------------------
-- 1、部门表
-- ----------------------------
drop table if exists sys_dept;
create table sys_dept (
  dept_id           bigint(20)      not null auto_increment    comment '部门id',
  parent_id         bigint(20)      default 0                  comment '父部门id',
  ancestors         varchar(50)     default ''                 comment '祖级列表',
  dept_name         varchar(30)     default ''                 comment '部门名称',
  order_num         int(4)          default 0                  comment '显示顺序',
  leader            varchar(20)     default null               comment '负责人',
  phone             varchar(11)     default null               comment '联系电话',
  email             varchar(50)     default null               comment '邮箱',
  status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time 	    datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  -- 以下为新增字段
  is_group          char(1)         not null default 'N'       comment '是否分组(Y是N否)',
  dept_type         varchar(30)     default null               comment '机构类型',
  dept_code         varchar(20)     default null               comment '机构简码',
  area_code         varchar(20)     default null               comment '区域简码',
  service_id        bigint(20)      default null               comment '虚拟服务id',
  suse_id           bigint(20)      default null               comment '虚拟服务使用端口id',
  primary key (dept_id),
  unique key uq_sys_dept_code(dept_code),
  unique key uq_sys_area_code(area_code),
  unique key uq_sys_suse_id(suse_id)
) engine=innodb auto_increment=200 comment = '部门表';

-- ----------------------------
-- 2、用户信息表
-- ----------------------------
drop table if exists sys_user;
create table sys_user (
  user_id           bigint(20)      not null auto_increment    comment '用户ID',
  dept_id           bigint(20)      default null               comment '部门ID',
  user_name         varchar(30)     not null                   comment '用户账号',
  nick_name         varchar(30)     not null                   comment '用户昵称',
  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户)',
  email             varchar(50)     default ''                 comment '用户邮箱',
  phonenumber       varchar(11)     default ''                 comment '手机号码',
  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
  avatar            varchar(100)    default ''                 comment '头像地址',
  password          varchar(100)    default ''                 comment '密码',
  status            char(1)         default '0'                comment '帐号状态(0正常 1停用)',
  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
  login_ip          varchar(128)    default ''                 comment '最后登录IP',
  login_date        datetime                                   comment '最后登录时间',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default null               comment '备注',
  primary key (user_id)
) engine=innodb auto_increment=100 comment = '用户信息表';

.......

6.3 springboot服务配置

6.3.1 springboot服务配置

  service_api:                          # 后端springboot服务
    container_name: bsp-api             # 容器名为'bsp-api'
    build:
      context: ./                       # 指定设定上下文根目录,然后以该目录为准指定Dockerfile
      dockerfile: ./Dockerfile-api
    working_dir: /app                   # 设置工作目录为容器内的app文件夹
    environment:
      TZ: Asia/Shanghai                 # 容器的时区
      spring.datasource.host: service_mysql  # 定义spring.datasource.host变量,可以在数据库连接串中使用${spring.datasource.host},也可以直接使用服务名service_mysql
      spring.redis.host: service_redis  # 定义spring.redis.host变量,在spring的redis配置中host使用${spring.redis.host}代替具体ip,也可以直接使用服务名service_redis
    volumes:                            # 挂载文件
      - /app/deploy/bsp:/app            # 将主机的bsp文件夹(jar包及配置目录)映射到容器内的/app/deploy/bsp文件夹
      - /app/deploy/bsp/uploadPath:/app/uploadPath   # 挂载上传文件目录,宿主机:容器,部署的配置文件中应该写容器的路径,即/app/uploadPath
      - /app/logs/bsp:/home/founder/logs # 映射容器产生的日志到主机的/app/logs/bsp文件夹
      - /etc/localtime:/etc/localtime   # 容器时间与宿主机同步
    expose:                             # 暴露容器内端口,不映射到宿主机。因为 SpringBoot 服务会被 Nginx 做代理转发,所以不用暴露并映射到外部。
      - "8080"
    depends_on:
      - service_redis                   # service_api服务启动需依赖于service_redis
      - service_mysql                   # service_api服务启动需依赖于service_mysql
    restart: always                     # 重启策略: 容器退出时总是重启容器
    #networks:
    #  - appnet
    command: mvn clean spring-boot:run -Dspring-boot.run.profiles=dev '-Dmaven.test.skip=true' # 容器创建后执行命令运行springboot项目

SpringBoot 服务描述:

  • service_api:服务名称,可自定义。
  • container_name:容器名称,可自定义;不写会自动生成,生成规则为 【docker-compose.yml 文件的父目录名称 + _ + 服务名称 + 从1开始的数字】。
  • build:指定 Dockerfile 文件位置,构建镜像,并使用这个镜像来启动容器。
  • working_dir:设置工作目录为容器内的app目录。
  • environment:为启动的容器添加环境变量。此处配置了容器的时区,以及数据库连接名变量(使用方式spring.datasource.host或 servicemysql)、redis连接名变量(使用方式{spring.datasource.host} 或 service_mysql)、redis连接名变量(使用方式{spring.redis.host} 或 service_redis)。
  • volumes:配置映射,映射规则为 宿主机:容器,映射本地部署目录下的文件到容器/app目录下,映射容器产生的日志到主机的/app/logs/bsp文件夹,容器时间与宿主机同步。
  • expose:暴露容器内端口,不映射到宿主机。因为 SpringBoot 服务会被 Nginx 做代理转发,所以不用暴露并映射到外部。
  • depends_on :依赖与指定的服务。容器启动时,会先启动依赖服务,再启动当前服务。
  • command:容器启动后执行的命令。
  • restart:赋固定值 always,表示如果容器启动失败,会一直尝试重连。
  • networks:加入指定网络(未使用)。

6.3.2 springboot挂载目录及配置

c319e4cb3a98429b9059565b5516debb

Dockerfile-api配置文件具体内容见上述5.

84637d89cb8343bb8ebc5bea4e4bd209

  • application-druid.yml,数据源配置,其中数据库连接串url,spring.datasource.host:172.19.57.134表示优先使用{spring.datasource.host:172.19.57.134} 表示优先使用{spring.datasource.host}连接,若无法连接使用172.19.57.134连接,这里的地址也可以写为${spring.datasource.host} 或者 service_mysql,service_mysql表示服务名,spring.datasource.host是为这个服务定义的变量名,在docker-compose.yml文件中有定义。
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源 172.19.57.134   127.0.0.1  ${spring.datasource.host}
            master:
                url: jdbc:mysql://${spring.datasource.host:172.19.57.134}:3306/bspvue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
                username: root
                password: 111111
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url: 
                username: 
                password: 
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter: 
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: bspadmin
                login-password: 123456
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true
  • application.yml,springboot属性配置文件,包含了redis的配置。其中redis的host配置spring.redis.host:172.19.57.134,可以定义为{spring.redis.host:172.19.57.134},可以定义为{spring.redis.host} 或 使用服务名service_redis。
  # redis 配置
  redis:
    # 地址  172.19.57.134 ${spring.redis.host}
    host: ${spring.redis.host:172.19.57.134}
#    # 端口,默认为6379
    port: 6379
#    # 集群 nodes: 172.19.57.134:6380,172.19.57.134:6381,172.19.57.134:6382,172.19.57.134:6383,172.19.57.134:6384,172.19.57.134:6385
#    cluster:
#      nodes:
#        - 172.19.57.134:6380
#        - 172.19.57.134:6381
#        - 172.19.57.134:6382
#        - 172.19.57.134:6383
#        - 172.19.57.134:6384
#        - 172.19.57.134:6385
    # 数据库索引
    database: 1
    # 密码
    password: 111111
    # 连接超时时间
    timeout: 30s
    # lettuce/jedis
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池的最大数据库连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms

上传文件路径配置,application.yml中

  # 文件路径 示例( Windows配置D:/bsp/uploadPath,Linux配置 /home/bsp/uploadPath)
  # profile: D:/bsp/uploadPath
  profile: /app/uploadPath

6.4 nginx服务配置

6.4.1 nginx服务配置

  service_nginx:                        # 前端nginx服务
    container_name: container_nginx1.20.1  # 容器名
    image: nginx:1.20.1-alpine          # nginx镜像名
    restart: always
    ports:
      - 8789:80
      - 8080:80
      - 8082:80
      - 443:443
    privileged: true
    volumes:
      - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf  # nginx配置文件挂载
      - /app/deploy/bsp/ui/:/usr/share/nginx/html/       # html目录挂载
      - ./log/nginx/:/var/log/nginx/        #nginx日志文件挂载目录
      - /etc/localtime:/etc/localtime       # 容器时间与宿主机同步
      # - ./conf/proxy.conf:/etc/nginx/proxy.conf
      # - ./conf/conf.d/:/etc/nginx/conf.d/
    depends_on:
      - service_api                      # service_nginx服务启动需依赖于service_api
    #networks:
    #  - appnet

6.4.2 nginx挂载目录及配置

1a8faa9136d4492bad913b1a4707d055

ui挂载目录 - html页面等静态文件

434578e060b34d6693fb14fffe5e7e9f

nginx.conf

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
events {
    worker_connections  1024;
}
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
 
    keepalive_timeout  65;
 
    # include /etc/nginx/conf.d/*.conf;
 
      server {
        listen       80;
        charset      utf-8;
        server_name  localhost;  # 服务器地址或绑定域名
 
        # start ---------------------------------------------------------------------------------------------
 
        location / {
           root   /usr/share/nginx/html;
           try_files $uri $uri/ /index.html;
        }
 
        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://service_api:8789/prod-api/;
        }
 
        # end ---------------------------------------------------------------------------------------------
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
   }
}

7、docker-compse构建启动

docker-compose 命令可以自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

docker-compose up:最基本的启动命令
-d:后台启动
–scale:扩展服务节点,格式为 服务名=个数

7.1 构建镜像

docker-compose build

4b38681b01eb46bfbb5c463eeee713cc

f553c10360794b21a11b1e83b8f4c914

7.2 运行服务

docker-compose up      #启动服务
docker-compose up -d  #后台启动服务

c10aab5ab00947c681466ad6ccaac9e3

7.3 显示所有容器

docker ps -a 

docker-compose ps

e077d58e428041eda231ee74ecf60493

7.4 查看容器日志

docker logs -f 容器名, 如 docker logs -f container_nginx1.20.1

docker-compose logs   # 日志

5e0a19d92a1a436d8fe706acc5bf5446

7.5 查看容器镜像构建情况

docker-compose images

b23079e5671a4eb1bb6fa427e6fdea7a

7.6 停止并删除服务

docker-compose down #停止并删除服务

faa09691e166400aab1f8d904d6d39da

7.7 重启服务

docker-compose restart #重启服务

640195abb7bc44b6aa28ae49288e502f

7.8 停止服务

docker-compose stop #停止服务

6065684c3b2f43f3a0e56b5ed49c0904

7.9 启动服务

docker-compose start  #启动服务

bd38ecaba8884665bf017c7eed2b6e7b

7.10 帮助命令

docker-compose -h #帮助命令

b2b5a714a8864a00bff79555eb319edd

0

评论区