一键式 new 多个相同的实例(通过界面按钮 来控制 应用的创建、修改、删除,使用Docker Compose 编排应用所需环境)

news2024/12/23 14:42:16

一、简单介绍

需求:通过界面按钮 来控制 实例的创建、修改、删除。

由于Web应用采用多服务方式开发,每个服务都可以单独访问(单独占用一个端口)。以前部署服务器,采用的Nginx监听端口 转发。但是这样就会在new整个应用的时候,就需要暴露很多端口(每个服务都可以单独访问)、很多容器(每个服务一个容器)管理起来不方便。
对部署进行调整:所有服务打成war包形式,统一部署到tomcat上,对外只需暴露出tomcat端口+服务名就可访问对应服务。

二、环境准备:Docker镜像

  1. Tomcat:8
  2. Mysql:5.7.30
  3. webcenter/activemq:latest
  4. redis:5.0.7
  5. elasticsearch:7.7.0

注意:因elasticsearch 占用内存较大,这里所有的应用共享一个elasticsearch。其他中间件则每次new新实例,都会进行重新创建

三、安装

Docker 在创建容器时,为每个容器分配一个ip,如果不指定network则默认容器连接到docker0的虚拟网桥。
由于elasticsearch 是所有容器共享的,但是在使用Docker Compose编排时,每个Compose Docker 都会分配一个network,导致 Compose内容器与elasticsearch 不在一个网段中,Tomcat会连接不上elasticsearch
解决方案: 在创建elasticsearch 时,为elasticsearch 单独创建一个network(如果不单独创建,采用默认的network,Compose中容器会连接不上 Docker默认的network),因所有服务打成war包,部署在Tomcat上,所以Tomcat容器需连接 。也可不创建 但是 每次new完新实例就需单独使用命令(使不同网段容器间互联)

docker network connect 
0f7725a561c1(elasticsearch 所在networkID) 
7fcc20626a4e`(Tomcat容器ID)

Docker Compose 一个service下 容器访问可直接使用服务名称(jdbc:mysql://mysql:3306),如果容器是Compose 外部,则需容器互连之后,也可以采用容器名称访问

1、elasticsearch

为elasticsearch 创建network

docker network create -d bridge elasticsearch
  1. Docker创建elasticsearch 容器
docker run --name elasticsearch --network elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 3ff142212faf(imgeId)

这里采用初始elasticsearch 即可,线上使用自定义elasticsearch 镜像(设置访问密码等操作)

2、其他环境 采用Docker Compose 进行编排即可

在这里插入图片描述

目前没有对Mysql、Activemq、Redis 进行暴露端口,因为 都是容器内部访问,不需要外部访问。
Tomcat 对外暴露端口、及挂载路径是动态的,所以每次new 新实例 需针对这两部分进行单独替换。

3、单独安装环境

  1. activemq
docker run --name=activemq \
-itd \
-p 8161:8161 \
-p 61616:61616 \
-e ACTIVEMQ_ADMIN_LOGIN=admin \
-e ACTIVEMQ_ADMIN_PASSWORD=123456 \
--restart=always \
-v /usr/local/activemq-docker:/data/activemq \
-v /usr/local/activemq-docker/log:/var/log/activemq \
webcenter/activemq:latest
  1. redis
docker run -d --name redis -p 6389:6379 \
7eed8df88d3b redis-server --appendonly yes \
--requirepass 123456 --bind 0.0.0.0 \
--protected-mode no --daemonize no
  1. Mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \
 --name  mysql 9cfcce23593a

四、测试

1、执行Docker Compose

当使用 Compose 创建多个实例的时候,service名称都会相同,所以在启动的时候 需要指定每个Compose的项目名称 进行隔离

docker-compose -f compose.yml -p 项目名称 up -d

在这里插入图片描述
elasticsearch 为 单独启动的容器

2、把war包放入tomcat挂载目录

3、访问IP+tomcat端口+服务名称

在这里插入图片描述

五、通过Java代码执行命令 修改配置文件以及控制创建新实例

代码案例

五、其他常用命令及问题

1、命令

  1. 进入容器内部
docker exec -it 容器ID /bin/bash
  1. 停止所有容器
docker stop $(docker ps -a -q)
  1. 删除所有容器
docker rm $(docker ps -a -q)
  1. 查看容器详细信息
docker inspect 容器ID
  1. 查看容器日志
docker logs -f 容器ID
  1. 容器提交镜像
docker commit -a  创建者 -m 介绍 容器ID 镜像名:版本
  1. 镜像下载到本地
docker save -o xxx.tar 镜像ID
  1. 加载镜像到docker中
docker load -i xxx.tar

2、问题解决

  1. 进入容器内部时,经常找不到vim、ping、telnet等命令 需使用apt-get install下载,但是 下载的特别慢:
# 1. 清空/etc/apt/sources.list文件
 echo > /etc/apt/sources.list

# 2. 重新输出到文件
echo -e "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib \
ndeb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib \
ndeb http://mirrors.aliyun.com/debian-security stretch/updates main \ndeb-src http://mirrors.aliyun.com/debian-security stretch/updates main \
ndeb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib \
ndeb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib \
ndeb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib \
ndeb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" > /etc/apt/sources.list

# 3. 更新
apt-get update

# 4. 下载对应依赖即可
# 下载vim时可能会报错 依赖库版本过低导致,先安装依赖
apt-get install -y libtinfo5 --allow-remove-essential
apt-get install -y vim

# 安装telnet
apt-get install telnet
  1. Mysql容器打成镜像
    应用初始化时,Mysql中会有一些初始化数据。需要针对Mysql容器打包为镜像。在打包后重新启动容器时,发现数据都没有了。
需要进入Mysql容器内部,修改 /etc/mysql/mysql.conf.d/mysqld.cnf 把Mysql存储数据的路径 改为自定义路径。
datadir=自定义路径

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

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

相关文章

25K 入职腾讯的那天,我哭了...

悲催的经历: 先说一下自己的个人情况,计算机专业,17 年本科毕业,一毕业就进入了“阿里”测试 岗(进去才知道是接了个阿里外包项目,可是刚毕业谁知道什么外包不外包的)。 更悲催的是:刚入职因为家里出现一…

pcl中MomentOfInertiaEstimation解析与实例

pcl中features模块又基于惯性矩和偏心率的描述子,也可以求取点云的AABB和OBB包围盒,在计算的过程中法线一些问题,特此记录。 针对惯性矩和偏心率这两个数据的应用场景还不明确,因此暂时不做讨论,主要讨论求取OBB时的代…

天宇优配|GDR海外发行热情高 资本市场互联互通提速

圆桌评论:“对话交易所——上海,为中欧互联互通提速” “2022上海全球资产管理高峰论坛”11月29日在上海举办。在题为“对话交易所——上海,为中欧互联互通提速”的圆桌评论环节,来自全球各大证券交易所、证券公司、上市公司的多…

python学习笔记(12)---(内置模块)

目录 第十章 内置模块 1.math模块 2.random模块 3.os模块和os.path模块 4.sys模块 5.UUID模块 6.时间日期模块 7.加密模块hashlib:接受传入内容,计算后得到hash值 第十章 内置模块 1.math模块 (1)查看方法:…

BERT-of-Theseus

最近了解到一种称为"BERT-of-Theseus"的BERT模型压缩方法,源自论文《BERT-of-Theseus: Compressing BERT by Progressive Module Replacing》。这是一种以"可替换性"为出发点所构建的模型压缩方案,相比常规的剪枝、蒸馏等手段&#…

【特征选择】基于教与学算法实现二进制特征选择问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

第二证券|汽车板块现涨停潮!多只地产债再涨到临停

在昨日大幅上涨后,今日上午A股商场持续上行,不过涨势放缓,到上午收盘,上证指数上涨0.21%。 昨日带动大市上行的地产板块今日上午涨势减缓,包含福星股份、世茂股份在内的多只地产股涨停。不过也有极少数地产股逆势跌落&…

容器化应用系统上生产的最佳实践

前言 最近忙的要死, 👻👻👻. 上一周来了一次比 996 更猛的 907. 这周二终于有点遭不住了, 调休一天, 稍微歇息一下. 同时手痒的不行, 把筹备了好久的重磅文章发上来哈哈. 😆😆😆 不过时间还是有点仓促, …

自动化测试的生命周期是什么?

软件测试发展到今日,已经逐渐标准化且能力更强,其流程每天都在发展。测试人员的技术熟练程度对于整个测试阶段的成功来说至关重要。测试不再意味着仅仅发现错误;它的范围已经扩大,从任何开发项目开始就可以看出它的重要性。 当谈论…

[SpringMVC]第三篇:作用域传参

四大域: PageContext对象(不常用) 作用域范围:当前jsp页面内有效 request对象(经常用) 作用域范围:一次请求内。 作用: 解决了一次请求内的资源的数据共享问题 session对象(登录,会话时会用) 作用域范围:一次会话内有效。 说明:浏览器不关闭,并且后台的session不失效&#xff…

Python OpenCV 单目相机标定、坐标转换相关代码

前言 本文不讲原理,只关注代码,有很多博客是讲原理的,但是代码最多到畸变矫正就结束了,实际上就是到 OpenCV 官方示例涉及的部分。   在官方示例中使用黑白棋盘格求解了相机的内外参和畸变系数,并对图像做了畸变矫正…

【Android App】集成腾讯地图显示位置和地图面板讲解及实战(附源码和演示 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、集成腾讯地图 之所以选用腾讯地图来讲解,是因为它的集成过程相对简单,无须通过App的签名鉴权,腾讯地图的开放平台网址为 腾讯地图 集成腾讯地图分为以下几步 (1)在…

Linux网络基础------TCP/UDP协议

文章目录TCP和UDP的宏观认识UDP协议TCP协议 (绝对的核心重点)tcp协议报头各个字段的详解tcp协议的机制超时重传机制连接管理机制3次握手4次挥手滑动窗口流量控制拥塞控制延迟应答捎带应答粘包问题TCP和UDP的宏观认识 首先, TCP/UDP是位于传输…

元宇宙竟然也难逃性骚扰???

当我们还沉浸在元宇宙里种种美妙的虚拟体验之时,竟接连传出 “虚拟性骚扰” (virtual assault)……去年 12 月,Metaverse Research 的联合创始人 Nina Jane Patel,在自己的 Blog 记录下她参与 Meta 元宇宙游戏《地平线…

学习响应式布局

针对性内容 页面设计在不同设备的显示情况布局只会使用float定位,而不会掌握flex不能很好的使用rem作为设计单位掌握响应式布局、弹性等常见布局 学习内容 css中媒体查询的作用和使用方法flex弹性盒子的用法rem的作用和使用方法目录 针对性内容 学习内容 Media…

第8章 自定义SwaggerIndex页与登录页

“Blog.Core-master”程序没有使用.Net7框架内置的index.html页对api方法进行渲染显示,而是通过对“Swagger”和“SwaggerUI”内置中间件的自定义操作,调用根目录下的自定义index.html页对api方法进行渲染显示。 1、自定义“Swagger”和“SwaggerUI”内…

[附源码]Python计算机毕业设计Django付费自习室管理小程序

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案

今天和大家分享一个报错的解决方案 背景 项目打包部署到宝塔上后,打开网页,上传东西时出现了一个报错,但是在本地开发环境是没有问题的。 报错内容: 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象从而导致报错。 解…

Java医院信息管理系统源码带文字安装教程

技术架构 技术框架:springboot shiro layui jquery thymeleaf nginx 运行环境:jdk8 mysql IntelliJ IDEA maven 宝塔面板 文字安装教程 下载源码,创建一个数据库,导入hospitaldata.sql文件至数据库中。 使用IDEA打开hosp…

Kotlin高仿微信-第29篇-朋友圈-发布作品(图片)

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…