Docker Compose:部署SpringBoot应用(含MySQL,Redis,Nacos,RabbitMQ)

目录

前言

Docker Compose安装、常用命令、模板文件

使用Docker Compose的步骤

使用Docker Compose部署SpringBoot应用

1. 运行配置要求

2. 容器化SpringBoot应用

3. SpringBoot依赖服务脚本

 devecimag-docker-compose-env.yml

参数变量.env

 MySQL 数据库脚本执行

1. Navicat

2. Docker命令

4. SpringBoot应用服务脚本

devecimag-docker-compose-app.yml

 5. 启动docker-compose

 6. 使用Docker可视化工具: Portainer查看部署结果


前言

阅读本文前,建议先熟悉一下文章, 了解Docker基本概念, 如何容器化Springboot应用, 如何使用idea方便快速连接Docker服务器

  1. 准备虚拟机: 在win10上使用VMware Pro16 安装 CentOS 7.9 设置静态IP 可以访问外网
  2. 安装Docker和容器化Springboot引用: 第一个docker化的java应用
  3. Docker可视化工具: Portainer的安装和使用 (界面上几乎能够操作常见的Docker命令)

  4. Idea:连接远程主机SFTP服务实现文件上传和下载   (便于更新Dockerfile文件)
  5. Idea:连接Docker服务器 (便于查看镜像,容器日志等)
  6. 构建和推送镜像: docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云

Docker Compose安装、常用命令、模板文件

具体参考: https://glory.blog.csdn.net/article/details/113365376

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Docker Compose是一个用于定义和运行多个docker容器应用的工具。使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了。

使用Docker Compose的步骤

 

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

使用Docker Compose部署SpringBoot应用

1. 运行配置要求

CenterOS7.6版本,推荐4G以上内存。

具体搭建参考: 准备虚拟机: 在win10上使用VMware Pro16 安装 CentOS 7.9 设置静态IP 可以访问外网

2. 容器化SpringBoot应用

具体参考: 构建和推送镜像: docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云

3. SpringBoot依赖服务脚本

Docker Compose:部署SpringBoot应用(含MySQL,Redis,Nacos,RabbitMQ)_第1张图片

 devecimag-docker-compose-env.yml

#用于部署运行所依赖的服务
version: '3'
services:
  # MySQL数据库
  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} #设置root帐号密码
      TZ: Asia/Shanghai
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_DATA_DIR}:/var/lib/mysql #数据文件挂载
      - ${MYSQL_CONF_DIR}:/etc/mysql/conf.d #配置文件挂载
      - ${MYSQL_LOG_DIR}:/var/log/mysql #日志文件挂载
  # Redis数据库
  redis:
    image: redis:${REDIS_VERSION}
    container_name: redis
    environment:
      TZ: Asia/Shanghai
    command: redis-server --appendonly yes
    restart: always
    volumes:
      - ${REDIS_DATA_DIR}:/data #数据文件挂载
      - ${REDIS_CONF_FILE}:/etc/redis/redis.conf #配置文件挂载
    ports:
      - "${REDIS_HOST_PORT}:6379"

  # RabbitMQ消息队列
  rabbitmq:
    image: rabbitmq:${RABBITMQ_VERSION}
    container_name: rabbitmq
    #privileged: true
    restart: always
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ${RABBITMQ_DATA_DIR}:/var/lib/rabbitmq #数据文件挂载
      #- ${RABBITMQ_CONF_DIR}:/etc/rabbitmq #配置文件挂载
      - ${RABBITMQ_LOG_DIR}:/var/log/rabbitmq #日志文件挂载
    ports:
      - "${RABBITMQ_HOST_PORT}:5672"
      - "${RABBITMQ_MAG_PORT}:15672"

  # Nacos注册中心和配置中心
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos
    restart: always
    environment:
      - "TZ=Asia/Shanghai"
      - "PREFER_HOST_MODE=${PREFER_HOST_MODE}"
      - "MODE=${MODE}"
      - "SPRING_DATASOURCE_PLATFORM=${SPRING_DATASOURCE_PLATFORM}"
      - "MYSQL_SERVICE_HOST=${MYSQL_SERVICE_HOST}"
      - "MYSQL_SERVICE_DB_NAME=${MYSQL_SERVICE_DB_NAME}"
      - "MYSQL_SERVICE_PORT=${MYSQL_SERVICE_PORT}"
      - "MYSQL_SERVICE_USER=${MYSQL_SERVICE_USER}"
      - "MYSQL_SERVICE_PASSWORD=${MYSQL_SERVICE_PASSWORD}"
    volumes:
      - ${NACOS_LOG_DIR}:/home/nacos/logs:rw #日志文件挂载
      - ${NACOS_CONF_DIR}:/home/nacos/init.d #配置文件挂载
    depends_on:
      - mysql
    ports:
      - 8848:8848

参数变量.env

################################################
###   devicemag environment config file     ###
################################################

#################### MySQL #####################
MYSQL_VERSION=5.7
MYSQL_HOST_PORT=3306
MYSQL_ROOT_PASSWORD=vr123456
MYSQL_DATA_DIR=/mydata/mysql/data/db
MYSQL_CONF_DIR=/mydata/mysql/data/conf
MYSQL_LOG_DIR=/mydata/mysql/log



#################### Redis #####################
REDIS_VERSION=5
REDIS_HOST_PORT=6379
REDIS_DATA_DIR=/mydata/redis/data
REDIS_CONF_FILE=/mydata/redis/conf/redis.conf



#################### RabbitMQ #####################
RABBITMQ_VERSION=3.7.15-management
RABBITMQ_HOST_PORT=5672
RABBITMQ_MAG_PORT=15672
RABBITMQ_DATA_DIR=/mydata/rabbitmq/data
RABBITMQ_CONF_DIR=/mydata/rabbitmq/conf
RABBITMQ_LOG_DIR=/mydata/rabbitmq/log



#################### NACOS #####################
NACOS_VERSION=1.2.1
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
#此处要主要的是要写mysql服务的host,不能写127.0.0.1;直接写mysql即可
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=devicemag-config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=XXXX
NACOS_LOG_DIR=/mydata/nacos/log
NACOS_CONF_DIR=/mydata/nacos/conf

 MySQL 数据库脚本执行

1. Navicat

通过mysql客户端工具, 连接数据库执行脚本

2. Docker命令

需要创建test数据库并创建一个可以远程访问的对象reader。

将test.sql文件拷贝到mysql容器的/目录下:

docker cp /mydata/test.sql mysql:/

进入mysql容器并执行如下操作:

#进入mysql容器
docker exec -it mysql /bin/bash
#连接到mysql服务
mysql -uroot -proot --default-character-set=utf8
#创建远程访问用户
grant all privileges on *.* to 'reader' @'%' identified by '123456';
#创建mall数据库
create database testcharacter set utf8;
#使用test数据库
use test;
#导入test.sql脚本
source /test.sql;

4. SpringBoot应用服务脚本

devecimag-docker-compose-app.yml

#用于部署业务服务
version: '3'
services:
  #  认证模块
  devicemag-auth:
    image: registry.cn-beijing.aliyuncs.com/fly_jt/devicemag-auth:1.0.0
    container_name: devicemag-auth
    restart: always
    ports:
      - 8050:8050
    volumes:
      - /mydata/devicemag/log/devicemag-auth:/var
      - /etc/localtime:/etc/localtime
    environment:
      - 'TZ="Asia/Shanghai"'
#    depends_on:
#      - mysql
#      - redis
#      - nacos
    external_links:
      - redis:redis #可以用redis这个域名访问redis服务
      - mysql:db #可以用db这个域名访问mysql服务
      - nacos:nacos #可以用nacos这个域名访问nacos服务
  #  网关模块
  devicemag-gateway:
    image: registry.cn-beijing.aliyuncs.com/fly_jt/devicemag-gateway:1.0.0
    container_name: devicemag-gateway
    restart: always
    ports:
      - 8080:8080
    volumes:
      - /mydata/devicemag/log/devicemag-gateway:/var
      - /etc/localtime:/etc/localtime
    environment:
      - 'TZ="Asia/Shanghai"'
#    depends_on:
#      - mysql
#      - redis
#      - nacos
    external_links:
      - redis:redis #可以用redis这个域名访问redis服务
      - mysql:db #可以用db这个域名访问mysql服务
      - nacos:nacos #可以用nacos这个域名访问nacos服务
  # 系统模块
  devicemag-system:
    image: registry.cn-beijing.aliyuncs.com/fly_jt/devicemag-system:1.0.0
    container_name: devicemag-system
    restart: always
    ports:
      - 8070:8070
    volumes:
      - /mydata/devicemag/log/devicemag-system:/var
      - /etc/localtime:/etc/localtime
    environment:
      - 'TZ="Asia/Shanghai"'
#    depends_on:
#      - mysql
#      - redis
#      - nacos
    external_links:
      - redis:redis #可以用redis这个域名访问redis服务
      - mysql:db #可以用db这个域名访问mysql服务
      - nacos:nacos #可以用nacos这个域名访问nacos服务
  # 文件模块
  devicemag-file:
    image: registry.cn-beijing.aliyuncs.com/fly_jt/devicemag-file:1.0.0
    container_name: devicemag-file
    restart: always
    ports:
      - 8060:8060
    volumes:
      - /mydata/devicemag/log/devicemag-file:/var
      - /etc/localtime:/etc/localtime
    environment:
      - 'TZ="Asia/Shanghai"'
#    depends_on:
#      - mysql
#      - redis
#      - nacos
    external_links:
      - redis:redis #可以用redis这个域名访问redis服务
      - mysql:db #可以用db这个域名访问mysql服务
      - nacos:nacos #可以用nacos这个域名访问nacos服务
  # 核心模块
  devicemag-core:
    image: registry.cn-beijing.aliyuncs.com/fly_jt/devicemag-core:1.0.0
    container_name: devicemag-core
    restart: always
    ports:
      - 8090:8090
    volumes:
      - /mydata/devicemag/log/devicemag-core:/var
      - /etc/localtime:/etc/localtime
    environment:
      - 'TZ="Asia/Shanghai"'
#    depends_on:
#      - mysql
#      - redis
#      - rabbitmq
#      - nacos
    external_links:
      - redis:redis #可以用redis这个域名访问redis服务
      - mysql:db #可以用db这个域名访问mysql服务
      - nacos:nacos #可以用nacos这个域名访问nacos服务
      - rabbitmq:rabbit #可以用rabbit这个域名访问rabbitmq服务

 5. 启动docker-compose

上传完后在当前目录下执行如下命令

docker-compose -f devecimag-docker-compose-env.yml up -d
docker-compose -f devecimag-docker-compose-app.yml up -d
[root@localhost devicemag]# docker-compose -f devecimag-docker-compose-env.yml  up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
WARNING: Found orphan containers (devicemag-gateway, devicemag-core, devicemag-file, devicemag-system, devicemag-auth) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Recreating redis ... 
mysql is up-to-date
rabbitmq is up-to-date
Recreating redis ... done
[root@localhost devicemag]# docker-compose -f devecimag-docker-compose-app.yml  up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
WARNING: Found orphan containers (redis, nacos, mysql, rabbitmq) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Recreating devicemag-system  ... done
Recreating devicemag-file    ... done
Recreating devicemag-auth    ... done
Recreating devicemag-gateway ... done
Recreating devicemag-core    ... done

 

 6. 使用Docker可视化工具: Portainer查看部署结果

Docker Compose:部署SpringBoot应用(含MySQL,Redis,Nacos,RabbitMQ)_第2张图片 使用 Docker可视化工具: Portainer查看部署结果

 

Docker Compose:部署SpringBoot应用(含MySQL,Redis,Nacos,RabbitMQ)_第3张图片 使用 Docker可视化工具: Portainer查看部署结果

 

你可能感兴趣的:(琦彦の百宝箱,Docker:一个应用容器引擎,docker-compose,SpringBoot,mysql,redis,nacos)