基于docker compose 构建 mysql redis mogodb nacos nginx等常用的公共组件

基于docker compose 快速构建单机版本公共组件

1.编写docker-compose-base.yaml文件

#新建目录
mkdir -p  /usr/local/base
cd  /usr/local/basel

新建docker-compose-base.yaml文档,编辑以下内容

#指定compose版本
version: "3.5"
#定义启动服务
services:
  #tomcat服务
  tomcat:
    #指定下载镜像
    image: tomcat:8.5.79-jre8-temurin-focal
    #设置容器名称,相当于 docker run --name 容器名
    container_name: tomcat
    #设置主机名
    hostname: tomcat
    #指定容器中运行应用的用户名
#    user: root
    #指定容器退出后的重启策略为始终重启
    restart: always
    #允许容器中运行一些特权命令
    privileged: true
    #指定对外映射端口,相当于 docker run -p 主机端口:容器端口
    ports:
      - "8080:8080"
    #挂载目录,相当于 docker run -v 主机目录:容器目录
    volumes:
      - "/home/data/tomcat/webapps:/usr/local/tomcat/webapps"
    environment:
      TZ: "Asia/Shanghai" 
    #使用网桥,相当于 docker run --network 网桥名
    networks:
      - mynet
#redis服务
  redis:
    #指定下载镜像
    image: redis:6.0.16
    #设置容器名称,相当于 docker run --name 容器名
    container_name: redis
    #设置主机名
    hostname: redis
    #指定容器中运行应用的用户名
#    user: root
    #指定容器退出后的重启策略为始终重启
    restart: always
    #允许容器中运行一些特权命令
    privileged: true
    #声明容器端口
    expose:
      - "6379"
    #指定对外映射端口,相当于 docker run -p 主机端口:容器端口
    ports:
      - "6379:6379"
    #挂载目录,相当于 docker run -v 主机目录:容器目录
    volumes:
#      - redisdata:/data
      - "/home/data/redis/data:/data"
      - "/home/data/redis/redis.conf:/etc/redis/redis.conf"
    #使用网桥,相当于 docker run --network 网桥名
    networks:
      - mynet
    #启动容器执行命令,相当于docker run [镜像:tag]  [命令], 登录redis: redis-cli -h 192.168.0.80 -p 6379 -a Dszn@2020
    command: "redis-server /etc/redis/redis.conf"

#mysql数据库
  mysql:
    image: mysql:5.7.31
    container_name: mysql
    #设置主机名
    hostname: mysql
    restart: always
    privileged: true
    command: mysqld --character-set-server=utf8mb4 --lower_case_table_names=1 --collation-server=utf8mb4_unicode_ci --skip-name-resolve
    #声明容器端口
    expose:
      - "3306"
    ports:
      - "3306:3306"
    volumes:
      #- mysqldata:/var/lib/mysql
      #- mysqlconf:/etc/mysql
      - "/home/data/mysql/data:/var/lib/mysql"
      - "/home/data/mysql/conf.d:/etc/mysql/conf.d"
    #指定环境变量,相当于docker run -e 参数, 登录mysql: mysql -h192.168.0.80 -P3306 -uroot -pDs20Pwd@
    environment:
      - MYSQL_ROOT_PASSWORD=moon123
      - MYSQL_DATABASE=daison_cloud
    networks:
      - mynet

  #rabbitmq消息队列
  rabbitmq:
    image: rabbitmq:3.8.27-management
    container_name: rabbitmq
    #设置主机名
    hostname: rabbitmq
    restart: always
    privileged: true
    #声明容器端口
    expose:
      - "5672"
      - "15672"
    ports:
      - "5672:5672"
      - "15672:15672"
    #挂载目录,相当于 docker run -v 主机目录:容器目录
    volumes:
      #- rabbitmqdata:/var/log/rabbitmq
      #- rabbitmqlogs:/var/lib/rabbitmq
      - "/home/data/rabbitmq/data:/var/lib/rabbitmq"
    #指定环境变量,相当于docker run -e 参数
    environment:
      - RABBITMQ_DEFAULT_USER=moon
      - RABBITMQ_DEFAULT_PASS=123456
    networks:
      - mynet
  #nacos服务管理
  nacos:
    image: nacos/nacos-server:v2.0.4-slim
    container_name: nacos
    #设置主机名
    hostname: nacos
    #user: root
    restart: always
    privileged: true
    #声明容器端口
    expose:
      - "8848"
    ports:
      - "8848:8848"
    #挂载目录,相当于 docker run -v 主机目录:容器目录
    volumes:
      #- nacosdata:/home/nacos/logs
      - "/home/data/nacos/init.d:/home/nacos/init.d"
      - "/home/data/nacos/logs:/home/nacos/logs"
    #指定环境变量,相当于docker run -e 参数
    environment:
      - MODE=standalone
      - PREFER_HOST_MODE=hostname
      - mynet
    #指定依赖
    depends_on:
      - mysql
  #nginx服务
  nginx:
    #指定下载镜像
    image: nginx:latest
    #设置容器名称,相当于 docker run --name 容器名
    container_name: nginx
    #设置主机名
    hostname: nginx
    #指定容器中运行应用的用户名
    #    user: root
    #指定容器退出后的重启策略为始终重启
    restart: always
    #允许容器中运行一些特权命令
    privileged: true
    #声明容器端口
    expose:
      - "80"
    #指定对外映射端口,相当于 docker run -p 主机端口:容器端口
    ports:
      - "8000:80"
    #挂载目录,相当于 docker run -v 主机目录:容器目录
    volumes:
      #      - nginxdata:/data
      - "/home/data/nginx/www:/usr/share/nginx/html"
      - "/home/data/nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "/home/data/nginx/conf:/etc/nginx/conf"
      - "/home/data/nginx/logs:/var/log/nginx"
    #使用网桥,相当于 docker run --network 网桥名
    networks:
      - mynet
  #mongo服务
  mongo:
    image: mongo:4.4.10
    container_name: mongo
    restart: always
    volumes:
      - /home/data/mongo/db:/data/db # 挂载数据目录
      - /home/data/mongo/log:/var/log/mongodb  # 挂载日志目录
      - /home/data/mongo/config:/etc/mongo  # 挂载配置目录
      - /etc/localtime:/etc/localtime
    ports:
      - 27018:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root
    command: mongod --port 27017
  #zookeeper
  zookeeper:
    image: zookeeper:3.6.2
    container_name: zookeeper
    restart: always
    hostname: zookeeper
    ports:
      - 2182:2181
    volumes:
      - /home/data/zookeeper/data:/data
      - /home/data/zookeeper/conf:/conf
  #kafka
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    restart: always
    hostname: kafka
    ports:
      - 9092:9092
    volumes:
      - /etc/localtime:/etc/localtime
      - ./docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
    external_links:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_DEFAULT_REPLICATION_FACTOR: 3
      KAFKA_NUM_PARTITIONS: 3


  


#声明网桥
networks:
  #定义服务网桥名称
  mynet:
    #false-统自动创建网桥名,格式为: 目录名_网桥名,默认为false; true-使用外部创建的网桥,需要自己手动创建
    external: false

#挂载目录,声明服务使用的创建卷名
volumes:
  redisdata:
    #false-系统自动创建的卷名,格式为: 目录名_卷名,默认为false; true-使用外部创建的卷面,需要自己手动创建
    external: false
  mysqldata:
  mysqlconf:
  rabbitmqdata:
  rabbitmqlogs:


  


#声明网桥
networks:
  #定义服务网桥名称
  mynet:
    #false-统自动创建网桥名,格式为: 目录名_网桥名,默认为false; true-使用外部创建的网桥,需要自己手动创建
    external: false

#挂载目录,声明服务使用的创建卷名
volumes:
  redisdata:
    #false-系统自动创建的卷名,格式为: 目录名_卷名,默认为false; true-使用外部创建的卷面,需要自己手动创建
    external: false
  mysqldata:
  mysqlconf:
  rabbitmqdata:
  rabbitmqlogs:



在services:下维护了各个公共组件的服务,在公共组件配置文档一般提供了比较全的组件配置文件,若该次服务不用部署某一个或几个服务,则按照要求取公共服务组件即可。 例如 考虑到前端统一部署,需要将nginx 分离部署,去掉服务中的nginx即可,或者全量部署,服务启动后将nginx服务停用。

若存储部分mysql 需要分离,则公共环境去掉mysql,另一个存储环境只保留mysql服务即可。

docker 常用批量操作命令

#启动所有镜像
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#停止所有镜像
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
# 删除所有容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
#删除所有镜像
docker rmi $(docker images | awk '{print $3}' |tail -n +2)

假如服务没有安装docker及docker-compse 可以参照docker及docker-compose安装
下载挂载卷 上传到服务器 /usr/local/base
cd /usr/local/base

链接:https://pan.baidu.com/s/1YMKv2pPm_s3f_ac-8KlHQw 
提取码:0jr9 
--来自百度网盘超级会员V5的分享

在这里插入图片描述
在这里插入图片描述
2.将公共镜像目录下data上传到服务器/home目录下。

3.将baseServer.tar 上传到服务器 并在该路径下执行(若无网络离线安装,有网可以不需要,利用联网下载)

mv data  /home/data


docker load -i baseServer.tar

授权 启动:

chmod 777 -R /home/data

docker-compose -f  docker-compose-base.yml  up  -d

查看端口及容器启动情况

docker ps -a 
#查看启动端口
netstat -ntlp 

在这里插入图片描述
基础的组件服务已经安装完毕;
开启外网访问端口

mysql端口:3306
rabbitmq端口:567215672
redis端口:6379
nacos端口:8848
nginx端口:80
zk端口:2181
kafka端口:9092
mongdb端口:27017

iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8848 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

公共环境测试:

  • nacos 测试: http://ip:8848/nacos 账号:nacos 密码:nacos
  • mysql 测试 采用工具(Navicat)连接3306 账号:root 密码:moon123
  • rabbitmq测试: http://ip:15672 账号:moon密码: 123456
  • 其他组件都可以用命令或者客户端工具进行测试
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值