微服务项目容器编排docker-compose.yml、Dockerfile文件模板、相关配置文件、shell脚本

nacos Dockerfile(不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM nacos/nacos-server
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# 复制conf文件到路径
COPY ./conf/application.properties /home/nacos/conf/application.properties

redis Dockerfile(不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM redis
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
&& mkdir -p /home/nc/redis
# 挂载目录
VOLUME /home/nc/redis
# 指定路径
WORKDIR /home/nc/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/nc/redis/redis.conf

nginx Dockerfile (不需要特殊处理,使用docker conpose可以不写)

# 基础镜像
FROM nginx
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
&& mkdir -p /home/nc/projects/nc-ui
# 挂载目录
VOLUME /home/nc/projects/nc-ui
# 指定路径
WORKDIR /home/nc/projects/nc-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/nc/projects/nc-ui

业务服务 Dockerfile(直接换上对应服务的jar)

# 基础镜像
FROM  openjdk:8-jre
# author
MAINTAINER jianglifeng<jlifeng@foxmail.com>
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
&& mkdir -p /home/nc/projects/nc-ui
# 挂载目录
VOLUME /home/nc
# 指定路径
WORKDIR /home/nc
# 启动服务
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=test","jar文件名.jar"]

docker-compose.yml

version : '3.7'
services:
#  生产环境使用单独的nacosnc-nacos:container_name: nc-nacosimage: nacos/nacos-serverbuild:context: ./nacosenvironment:- MODE=standalone- TZ=Asia/Shanghaivolumes:- ./nacos/logs/:/home/nacos/logs- ./nacos/conf/application.properties:/home/nacos/conf/application.propertiesports:- "8848:8848"- "9848:9848"- "9849:9849"nc-redis:container_name: nc-redisimage: redisbuild:context: ./redisports:- "6380:6379"environment:- TZ=Asia/Shanghaivolumes:- ./redis/conf/redis.conf:/home/nc/redis/redis.conf- ./redis/data:/datacommand: redis-server /home/nc/redis/redis.confnc-nginx:container_name: nc-nginximage: nginxbuild:context: ./nginxports:- "70:80"environment:- TZ=Asia/Shanghaivolumes:- ./nginx/html/dist:/home/nc/projects/nc-ui- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf- ./nginx/logs:/var/log/nginxdepends_on:- nc-gatewaylinks:- nc-gatewaync-gateway:container_name: nc-gatewaybuild:context: ./nc/gatewaydockerfile: dockerfileports:- "8080:8080"volumes:- ./logs/nc-gateway:/home/nc/logs/nc-gateway- ./nc/gateway/jar/xx-gateway.jar:/home/nc/xx-gateway.jardepends_on:- nc-redis- nc-nacoslinks:- nc-redis- nc-nacosnc-auth:container_name: nc-authbuild:context: ./nc/authdockerfile: dockerfileports:- "9200:9200"volumes:- ./logs/nc-auth:/home/nc/logs/nc-auth- ./nc/auth/jar/xx-auth.jar:/home/nc/xx-auth.jardepends_on:- nc-redis- nc-nacoslinks:- nc-redis- nc-nacosnc-modules-system:container_name: nc-modules-systembuild:context: ./nc/modules/systemdockerfile: dockerfileports:- "9201:9201"volumes:- ./logs/nc-system:/home/nc/logs/nc-system- ./nc/xx/system/jar/xx-modules-system.jar:/home/nc/xx-modules-system.jardepends_on:- nc-redis- nc-nacoslinks:- nc-redis- nc-nacosnc-modules-file:container_name: nc-modules-filebuild:context: ./nc/modules/filedockerfile: dockerfileports:- "9202:9202"volumes:- ./uploadPath:/home/nc/uploadPath- ./logs/nc-file:/home/nc/logs/nc-file- ./nc/modules/file/jar/xx-modules-file.jar:/home/nc/xx-modules-file.jarnc-modules-marketing:container_name: nc-modules-marketingbuild:context: ./nc/modules/marketingdockerfile: dockerfileports:- "9203:9203"volumes:- ./logs/nc-marketing:/home/nc/logs/nc-marketing- ./jar/modules/marketing/xx-modules-marketing.jar:/home/nc/xx-modules-marketing.jardepends_on:- nc-redis- nc-nacoslinks:- nc-redis- nc-nacos

nginx配置文件(https自行编写)

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   /home/nc/projects/nc-ui;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://ruoyi-gateway:8080/;}# 避免actuator暴露if ($request_uri ~ "/actuator") {return 403;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

脚本

部署脚本deploy.sh

#!/bin/sh# 使用说明,用来提示输入参数
usage() {echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]"exit 1
}# 启动基础环境(必须)
base(){docker-compose up -d nc-redis nc-nacos
}# 启动程序模块(必须)
modules(){docker-compose up -d 容器名称列表
}# 关闭所有环境/模块
stop(){docker-compose stop
}# 删除所有环境/模块
rm(){docker-compose rm
}# 删除所有镜像
rmi(){docker rmi 镜像名称列表
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"port")port
;;
"base")base
;;
"modules")modules
;;
"stop")stop
;;
"rm")rm
;;
*)usage
;;
esac

批量复制文件到对应目录copy.sh

#!/bin/sh# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {echo "Usage: sh copy.sh"exit 1
}# copy html
echo "begin copy html "
cp -r ../jar-dist/dist/** ./nginx/html/dist# copy jar
echo "begin copy xx-gateway "
cp ../jar-dist/xx-gateway.jar ./nc/gateway/jarecho "begin copy xx-auth "
cp ../jar-dist/xx-auth.jar ./nc/auth/jarecho "begin copy xx-modules-system "
cp ../jar-dist/xx-modules-system.jar ./nc/modules/system/jarecho "begin copy xx-modules-file "
cp ../jar-dist/xx-modules-file.jar ./nc/modules/file/jarecho "begin copy xx-modules-marketing "
cp ../jar-dist/xx-modules-marketing.jar ./nc/modules/marketing/jar

目录结构

docker/
│  copy.sh
│  deploy.sh
│  docker-compose.yml
│
├─nacos
│  │  dockerfile
│  │
│  └─conf
│          application.properties
│
├─nc
│  ├─auth
│  │  │  dockerfile
│  │  │
│  │  └─jar
│  │          readme.txt
│  │
│  ├─gateway
│  │  │  dockerfile
│  │  │
│  │  └─jar
│  │          readme.txt
│  │
│  └─modules
│      ├─file
│      │  │  dockerfile
│      │  │
│      │  └─jar
│      │          readme.txt
│      │
│      ├─marketing
│      │  │  dockerfile
│      │  │
│      │  └─jar
│      └─system
│          │  dockerfile
│          │
│          └─jar
│                  readme.txt
│
├─nginx
│  │  dockerfile
│  │
│  ├─conf
│  │      nginx.conf
│  │
│  └─html
│      └─dist
│              readme.txt
│
└─redis│  dockerfile│└─confredis.conf

日志输出模板logback.xml(放到resources目录下)

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 日志存放路径 --><property name="log.path" value="logs/nc-xx" /><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 系统模块日志级别控制  --><logger name="com.xx" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /></root>
</configuration>

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

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

相关文章

Qt --- 自定义提示框 类似QMessagebox

QMessageBox::information(NULL, QString("title"), QString("I am information")); 以下是自定义提示框的代码&#xff0c;有图有真相&#xff01;提示框大部分都采用模态的形式&#xff0c;关于模态也不再多提&#xff01;所以父类为QDialog&#xff0c;…

若依移动端Ruoyi-App 项目的后端项目入门

后端项目运行 运行报错 Error creating bean with name sysConfigServiceImpl: Invocation of init method failed 数据库创建了。 代码连接数据库地方了也匹配上了。但是还是报错。 分析 &#xff1a; 想起来我电脑从来没有安装过redis 下载安装redis到windows 链接&…

【Mac】编译Spring 源码和Idea导入

今天我们开始Spring源码的阅读之旅。阅读Spring的源码的第一步当然是编译Spring源码。首先我们要去GitHub上将spring源码给clone下来。 笔者编译环境如下&#xff1a; Spring版本&#xff1a;5.28 https://github.com/spring-projects/spring-framework/tree/v5.2.8.RELEASE …

人工智能项目集合推荐(数据集 模型训练 C++和Android部署)

人工智能项目集合推荐(数据集 模型训练 C和Android部署) 目录 人工智能项目集合推荐(数据集 模型训练 C和Android部署) 1.三维重建项目集合 ★双目三维重建 ★结构光三维重建 2.AI CV项目集合 ★人脸检测和人体检测 ★人体姿态估计(人体关键点检测) ★头部朝向估计 …

【C++初阶】模拟实现list

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

nginx配置站点强制开启https

当站点域名配置完SSL证书后&#xff0c;如果要强制开启HTTPS&#xff0c;可以在站点配置文件中加上&#xff1a; #HTTP_TO_HTTPS_START if ($server_port !~ 443){rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END 附上完整的配置完SSL证书&#xff0c;强制…

W18.4、单元测试

一、目标: 1. 提高代码质量 2. 提高提测质量 3. 降低联调成本 4. 减少修改代码引入新问题 二、单元测试要点 1. 编写独立的测试类:为每个要测试的类编写一个对应的测试类,保持测试代码与实际代码分离。 2. 测试代码覆盖率:尽量确保对实际代码的所有分支和边界情况…

Consul的简介与安装

1、Consul简介 Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;由HashiCorp公司用Go语言开发&#xff0c;Consul提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位的服…

Node.js怎么搭建HTTP服务器

在 Node.js 中搭建一个简单的 HTTP 服务器非常容易。以下是一个基本的示例&#xff0c;演示如何使用 Node.js 创建一个简单的 HTTP 服务器&#xff1a; // 导入 http 模块 const http require(http); // 创建一个 HTTP 服务器 const server http.createServer((req, res) …

Docker容器与虚拟化技术:GitHub账户注册

目录 一、实验 1.GitHub 一、实验 1.GitHub &#xff08;1&#xff09;GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 &#xff08;2&#xff09;官网 GitHub: Let’s build from here …

DQL语句的用法(MySQL)

文章目录 前言一、DQL语句间接和语法1、DQL简介2、DQL语法 二、DQL语句使用1、基础查询&#xff08;1&#xff09;查询多个字段&#xff08;2&#xff09;为字段设置别名&#xff08;3&#xff09;去除重复记录 总结 前言 本文主要介绍SQL语句中DQL语句的功能和使用方法&#…

乐趣无限:10款基于Pygame的经典游戏合集

​​​​​​引言 游戏开发一直是许多程序员和游戏爱好者追求的梦想。而Pygame作为一款功能强大的游戏开发库&#xff0c;为我们提供了实现各种有趣游戏的工具和接口。在本文中&#xff0c;我将向大家介绍10款基于Pygame的经典游戏合集&#xff0c;从简单的猜数字到刺激的飞机…

本地私有仓库、harbor私有仓库部署与管理

本地私有仓库、harbor私有仓库部署与管理 一、本地私有仓库1.本地私有仓库简介2.搭建本地私有仓库3.容器重启策略介绍 二、harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3.Harbor的构成4.harbor部署及配置5.客户端测试 三、Harbor维护1.创建2.普通用户操作私有仓库3.日…

一个mongodb问题分析

mongodb问题分析 现状 表的个数&#xff1a; 生产上常用的表就10来个。 sharding cluster replica set方式部署&#xff1a; 9个shard server&#xff0c; 每个shard server 1主2从&#xff0c; 大量数据写入时或对大表创建索引时&#xff0c;可能有主从复制延迟问题。实…

opencv-全景图像拼接

运行环境 python3.6 opencv 3.4.1.15 stitcher.py import numpy as np import cv2class Stitcher:#拼接函数def stitch(self, images, ratio0.75, reprojThresh4.0,showMatchesFalse):#获取输入图片(imageB, imageA) images#检测A、B图片的SIFT关键特征点&#xff0c;并计算…

C#,《小白学程序》第四课:数学计算

1 文本格式 /// <summary> /// 《小白学程序》第四课&#xff1a;数学计算 /// 这节课超级简单&#xff0c;就是计算成绩的平均值&#xff08;平均分&#xff09; /// 这个是老师们经常做的一件事。 /// </summary> /// <param name"sender"></…

管理类联考——英语——实战篇——大作文——图表——动态图表——第三段

第一句:Given all above arguments, it admits of no doubt that this tendency of 主题词2 will continue in the forthcoming years. 翻译:从以上我们的讨论来看,我们可以预测主题词2这一趋势在未来几年内仍将继续。 [备注1]:本句为趋势预测句,不需要说明…

【操作记录】CLion 中引入 Gurobi 并使用 C++ 编程

文章目录 一、前言二、具体操作2.1 创建项目2.2 修改编译工具2.3 修改 CMakeLists.txt2.4 修改 main.cpp2.5 运行测试 一、前言 虽然C编程大部分人都会选择使用VS&#xff0c;但是作为 IDEA 的长期用户&#xff0c;我还是比较习惯 JetBrains 风格的编译器&#xff0c;所以就选…

YARN资源管理框架论述

一、简介 为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性&#xff0c;并消除早期MapReduce框架中的JobTracker性能瓶颈&#xff0c;开源社区引入了统一的资源管理框架YARN。 YARN是将JobTracker的两个主要功能&#xff08;资源管理和作业调度/监控&#xff09;分离&…

Scikit-Learn中的特征选择和特征提取详解

概要 机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域&#xff0c;机器学习都被广泛地应用。在机器学习的过程中&#xff0c;我们需要从原始数据中提取出有用的特征&#xff0c;以便训练出好的模型。但是&#xff0c;如何选择最佳的特征是一个关键问…