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

一、简单介绍

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

由于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=自定义路径

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...