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


    一、简单介绍

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

    由于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)
    
    • 1
    • 2
    • 3

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

    1、elasticsearch

    为elasticsearch 创建network

    docker network create -d bridge elasticsearch
    
    • 1
    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)
    
    • 1

    这里采用初始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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    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
    • 2
    • 3
    • 4
    1. Mysql
    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \
     --name  mysql 9cfcce23593a
    
    • 1
    • 2

    四、测试

    1、执行Docker Compose

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

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

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

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

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

    在这里插入图片描述

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

    代码案例

    五、其他常用命令及问题

    1、命令

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1. Mysql容器打成镜像
      应用初始化时,Mysql中会有一些初始化数据。需要针对Mysql容器打包为镜像。在打包后重新启动容器时,发现数据都没有了。
    需要进入Mysql容器内部,修改 /etc/mysql/mysql.conf.d/mysqld.cnf 把Mysql存储数据的路径 改为自定义路径。
    datadir=自定义路径
    
    
    • 1
    • 2
    • 3
  • 相关阅读:
    4.MySQL的数据类型
    Android 7.1 音量定制限定在0-80%之间可调节
    卷积神经网络到底是什么,卷积神经网络是一种
    函数式编程中元组的简单运用
    左对齐和右对齐
    Excel宏管理库存清单
    Blend for Visual Studio 让XAML也可以像WinForm一样可视化设计,Blend 与Studio的区别
    Springboot整合JPA多数据源(Oracle+Mysql)
    11 C++设计模式之享元(Flyweight)模式
    STM32复习笔记(六):STM32远程升级&BootLoader相关
  • 原文地址:https://blog.csdn.net/weixin_44795847/article/details/128129544