Docker常用应用部署

Docker常用应用部署

一、Ubuntu系统Docker快速安装

Docker官网安装文档:https://docs.docker.com/engine/install/ubuntu/

bash 复制代码
# 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端
# sed -i 's/原字符串/新字符串/' /home/1.txt
# 下面这个是修改ubuntu的源
sudo sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新
sudo apt update -y
sudo apt install curl
# 抓取docker安装脚本到一个文件中
curl -fsSL get.docker.com -o get-docker.sh
# 执行脚本,通过脚本下载 推荐设置阿里云镜像下载加速 默认管理员登陆不加sudo;有警告就忽略
sudo sh get-docker.sh --mirror Aliyun

#==========解决每次输入sudo问题===========
# 将当前用户加入到docker组,这样每次使用就不需要sudo了
sudo gpasswd -a ${USER} docker
# 更新用户组,这样才能生效
newgrp - docker
sudo service docker restart

#============加速器================
# 加速器网址:https://www.daocloud.io/mirror#accelerator-doc,可能有时会失效
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 查看配置文件,自己添加加速器
vi /etc/docker/daemon.json
# {"registry-mirrors": ["http://hub-mirror.c.163.com"]}

# 下面地址任选一种就好
#腾讯云的镜像地址
https://mirror.ccs.tencentyun.com
#网易的镜像地址
http://hub-mirror.c.163.com
#下面的地址是假的,需要自己去阿里云 的容器镜像服务-》镜像加速器去复制自己的镜像地址
https://xxxx.mirror.aliyuncs.com
#daocloud发布的镜像地址
http://f1361db2.m.daocloud.io
# 最后要重启
sudo systemctl restart docker.service
# 安装ssh
sudo apt install openssh-server

#===========docker-compose=============
# 在官网下载符合条件的:https://github.com/docker/compose/releases
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# wget也可以使用来下载
mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 记得添加权限
chmod +x /usr/local/bin/docker-compose

# 放在bin目录下,在其他位置可以直接使用
sudo mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 第二种方法
sudo install docker-compose-linux-x86_64 /usr/local/bin/docker-compose
docker-compose ps


# ============================================
# 2023/6/20可用源
# 编辑 Docker 配置文件
sudo vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}
# 方法一,采用 systemctl 来重启,推荐
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方法二,采用 service 来重启
sudo service docker restart
bash 复制代码
# 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端
# sed -i 's/原字符串/新字符串/' /home/1.txt
# 下面这个是修改ubuntu的源
sudo sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新
sudo apt update -y
sudo apt install curl
# 抓取docker安装脚本到一个文件中
curl -fsSL get.docker.com -o get-docker.sh
# 执行脚本,通过脚本下载 推荐设置阿里云镜像下载加速 默认管理员登陆不加sudo;有警告就忽略
sudo sh get-docker.sh --mirror Aliyun

#==========解决每次输入sudo问题===========
# 将当前用户加入到docker组,这样每次使用就不需要sudo了
sudo gpasswd -a ${USER} docker
# 更新用户组,这样才能生效
newgrp - docker
sudo service docker restart

#============加速器================
# 加速器网址:https://www.daocloud.io/mirror#accelerator-doc,可能有时会失效
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 查看配置文件,自己添加加速器
vi /etc/docker/daemon.json
# {"registry-mirrors": ["http://hub-mirror.c.163.com"]}

# 下面地址任选一种就好
#腾讯云的镜像地址
https://mirror.ccs.tencentyun.com
#网易的镜像地址
http://hub-mirror.c.163.com
#下面的地址是假的,需要自己去阿里云 的容器镜像服务-》镜像加速器去复制自己的镜像地址
https://xxxx.mirror.aliyuncs.com
#daocloud发布的镜像地址
http://f1361db2.m.daocloud.io
# 最后要重启
sudo systemctl restart docker.service
# 安装ssh
sudo apt install openssh-server

#===========docker-compose=============
# 在官网下载符合条件的:https://github.com/docker/compose/releases
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# wget也可以使用来下载
mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 记得添加权限
chmod +x /usr/local/bin/docker-compose

# 放在bin目录下,在其他位置可以直接使用
sudo mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 第二种方法
sudo install docker-compose-linux-x86_64 /usr/local/bin/docker-compose
docker-compose ps


# ============================================
# 2023/6/20可用源
# 编辑 Docker 配置文件
sudo vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}
# 方法一,采用 systemctl 来重启,推荐
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方法二,采用 service 来重启
sudo service docker restart

二、Docker安装基本应用

1、Tomcat安装

bash 复制代码
# 指定时区和中文乱码
docker run -d -p 8080:8080 \
--name tomcat \
--restart=always \
-v /home/docker/tomcat/logs/:/usr/local/tomcat/logs/ \
# 这里需要自行创建好webapps内容,或者进入容器将webapps.list改成webapps
-v /home/docker/tomcat/webapps/:/usr/local/tomcat/webapps/ \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-e LANG="C.UTF-8" \
tomcat:latest


#==========================
docker run --name tomcat -p 8080:8080 \
-v tomcatconf:/usr/local/tomcat/conf \
-v tomcatwebapp:/usr/local/tomcat/webapps \
-d tomcat:jdk8-openjdk-slim-buster

docker-compose部署

yaml 复制代码
version: '3'
services:
  tomcat:
    image: tomcat:latest
    container_name: tomcat
    restart: always
    ports:
      - 8080:8080
    environment:
      TZ: "Asia/Shanghai"
      LANG: "C.UTF-8"
    volumes:
      - /opt/tomcat/conf/server.xml:/usr/local/tomcat/server.xml
      - /opt/tomcat/webapps:/usr/local/tomcat/webapps
      - /opt/tomcat/logs:/usr/local/tomcat/logs

2、Nginx安装

bash 复制代码
# https://www.digitalocean.com/community/tools/nginx
# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run -p 80:80 -p 443:443 --name nginx \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-v /usr/local/docker/nginx/conf/:/etc/nginx \
-d nginx:1.20.1

docker-compose部署

yaml 复制代码
version: '3'
services:
  nginx:
    container_name: nginx
    image: nginx
    restart: always
    ports:
      - 80:80
      - 443:443
    privileged: true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./conf/nginx/log/:/var/log/nginx
      # 注意:如下挂载都是覆盖
      #- ./conf/nginx/conf.d:/etc/nginx/conf.d
      #- ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      #- ./conf/nginx/html:/usr/share/nginx/html

3、Mysql安装

3.1 单机版安装

bash 复制代码
# 5.7版本
docker run -p 3306:3306 --name mysql57 \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7


#8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,或者
chmod -R 777 /app/mysql/data

# --privileged 特权容器,容器内使用真正的root用户
docker run -p 3306:3306 --name mysql8 \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \ 
-d mysql


# 针对配置文件,新建 my.cnf (/usr/local/mysql/conf),否则中文乱码
[client]
default_character_set=utf8 
[mysqld] 
collation_server = utf8_general_ci 
character_set_server = utf8 

docker-compose部署

yaml 复制代码
version : '3'
services:
  mysql:
    # 容器名
    container_name: mysql5
    # 重启策略
    restart: always
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
       # 挂载配置文件
       #  - ./mysql/db/:/docker-entrypoint-initdb.d
      # 挂载配置文件
      - ./mysql/conf:/etc/mysql/conf.d
      # 挂载日志
      - ./mysql/logs:/logs
      # 挂载数据
      - ./mysql/data:/var/lib/mysql
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      # root 密码
      MYSQL_ROOT_PASSWORD: 123456
      

#======================mysql8.0=================
version: '3'
services:
  mysql:
    container_name: mysql8
    restart: always
    # 注意8.0以后的问题
    privileged: true
    image: mysql:8.0
    volumes:
      # 挂载配置文件
      - ./mysql/conf:/etc/mysql/conf.d
      # 挂载日志
      - ./mysql/logs:/logs
      # 挂载数据
      - ./mysql/data:/var/lib/mysql
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
    environment:
      - TZ=Asia/Shanghai 
      - LANG=C.UTF-8 
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 33106:3306
    network_mode: "bridge"

3.2 主从复制

bash 复制代码
# 1、新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /usr/local/docker/mysql-master/log:/var/log/mysql \
-v /usr/local/docker/mysql-master/data:/var/lib/mysql \
-v /usr/local/docker/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

# 2、进入/usr/local/docker/mysql-master/conf目录下新建 my.cnf
#==================================
[mysqld]
## 设置server_id,同一局域网中需要唯一 
server_id=101
## 指定不需要同步的数据库名称 
binlog-ignore-db=mysql
## 开启二进制日志功能 
log-bin=mall-mysql-bin 
## 设置二进制日志使用内存大小(事务) 
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row) 
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。 
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062
#====================================

# 3、修改完配置后重启master实例
docker restart mysql-master

# 4、进入mysql-master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot

# 5、master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

# 6、新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave \
-v /usr/local/docker/mysql-slave/log:/var/log/mysql \
-v /usr/local/docker/mysql-slave/data:/var/lib/mysql \
-v /usr/local/docker/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

# 7、进入/usr/local/docker/mysql-slave/conf目录下新建my.cnf
# ====================================================
[mysqld] 
## 设置server_id,同一局域网中需要唯一 
server_id=102
## 指定不需要同步的数据库名称 
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务) 
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row) 
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。 
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 
slave_skip_errors=1062
## relay_log配置中继日志 
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志 
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外) 
read_only=1
# ====================================================

# 8、修改完配置后重启slave实例
docker restart mysql-slave

# 9、在主数据库中查看主从同步状态
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
show master status;
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 |      617 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

# 10、在从数据库中配置主从复制
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30; 
mysql> change master to master_host='106.14.76.55', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

# master_host:主数据库的IP地址; 
# master_port:主数据库的运行端口; 
# master_user:在主数据库创建的用于同步数据的用户账号; 
# master_password:在主数据库创建的用于同步数据的用户密码; 
# master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数; 
# master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数; 
# master_connect_retry:连接失败重试的时间间隔,单位为秒。 

# 11、在从数据库中查看主从同步状态
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
show slave status \G;

# 12、在从数据库中开启主从同步看到Slave_IO_Running和Slave_SQL_Running启动就行
start slave;

4、Redis安装

4.1 单机版安装

bash 复制代码
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
# 开启redis数据持久化,可选
appendonly yes
# 开启redis验证,可选 
requirepass 123
#注释掉,允许redis外地连接 
# bind 127.0.0.1
#将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败 
daemonize no 

#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run  -p 6379:6379 --name redis \
--privileged=true \
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/local/redis/data:/data -d redis:6.0.8 \
redis-server /etc/redis/redis.conf  --appendonly yes

docker-compose部署

yaml 复制代码
version: '3'
services:
  redis:
    image: redis:6.2.5
    container_name: redis
    privileged: true
    volumes:
      - ../redis/data:/data
      - ../redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ../redis/logs:/logs
    command: ["redis-server","/usr/local/etc/redis/redis.conf"]
    privileged: true
    ports:
      - 6379:6379
    environment:
      - TZ="Asia/Shanghai"
    restart: always

4.2 集群安装

bash 复制代码
# port:节点端口;
# requirepass:设置密码,访问时需要验证
# protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
# daemonize:是否以守护线程的方式启动(后台启动),默认 no;
# appendonly:是否开启 AOF 持久化模式,默认 no;
# cluster-enabled:是否开启集群模式,默认 no;
# cluster-config-file:集群节点信息文件;
# cluster-node-timeout:集群节点连接超时时间;
# cluster-announce-ip:集群节点 IP
# 注意: 如果你想要你的redis集群可以供外网访问,这里直接填 服务器的IP 地址即可;如若为了安全,只是在服务器内部进行访问,这里还需要做一些修改。
# cluster-announce-port:集群节点映射端口;
# cluster-announce-bus-port:集群节点总线端口

#shell脚本循环生成配置文件
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat <<EOF>>/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
bash 复制代码
# 首先创建自定义网络
docker network create --driver bridge --subnet 172.38.0.0/24 --gateway 172.38.0.1 redis
#分别启动docker容器,shell脚本,注意配置文件的生成
for i in $(seq 1 6);\
do \
docker run -p 637${i}:6379 -p 1637${i}:16379 \
--name redis-${i} --privileged=true \
-v /mydata/redis/node-${i}/data:/data \
-v /mydata/redis/node-${i}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${i} redis \
redis-server /etc/redis/redis.conf
done

# 随机进入一个容器
docker exec -it redis-1 /bin/bash
# 生成集群,--cluster-replicas 1 表示为每个master创建一个slave节点 
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1   
# 进入客户端
redis-cli -p 6379
# 查看集群结点状况
cluster nodes
# 查看集群信息
cluster info
# 需要进入集群模式,否则会报错
redis-cli -p 6379 -c
# 集群会自动计算哈希槽存储位置,若主节点宕机,从节点会成为主节点
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK

4.3 主从扩容

bash 复制代码
# 1、新建6377、6378两个节点+新建后启动+查看是否8节点,注意配置文件的创建
docker run -p 6377:6379 -p 16377:16379 --name redis-7 --privileged=true -v /mydata/redis/node-7/data:/data -v /mydata/redis/node-7/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.17 redis redis-server /etc/redis/redis.conf
docker run -p 6378:6379 -p 16378:16379 --name redis-8 --privileged=true -v /mydata/redis/node-8/data:/data -v /mydata/redis/node-8/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.18 redis redis-server /etc/redis/redis.conf

# 2、进入6377容器实例内部
docker exec -it redis-7 /bin/bash

# 3、将新增的6377节点(空槽号)作为master节点加入原集群
# redis-cli --cluster  add-node  自己实际IP地址:6377  自己实际IP地址:6371 
# 6377 就是将要作为master新增节点 
# 6371 就是原来集群节点里面的领路人,相当于6377找到组织加入集群
# 这里我直接使用了内部网络
redis-cli --cluster add-node 172.38.0.17:6379 172.38.0.11:6379 

# 4、检查集群情况第1次
redis-cli --cluster check  172.38.0.11:6379

# 5、重新分派槽号
redis-cli --cluster reshard 172.38.0.11:6379

# 因为4台,16384/4=4096,每台分4分之一
How many slots do you want to move (from 1 to 16384)? 4096
# 172.38.0.17:6379 的id
What is the receiving node ID? 3a732104b11d3cf81d1128def9f0158fb5708ca7
# 输入 all
Source node #1: all

# 6、检查集群情况第2次
redis-cli --cluster check  172.38.0.11:6379
172.38.0.11:6379 (9c109831...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.12:6379 (0100361c...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.13:6379 (348dc3b1...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.17:6379 (5d34f842...) -> 0 keys | 4096 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: 9c109831a0afd33f7c13500caf39d3191a13e0b3 172.38.0.11:6379
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
M: 0100361c6056686b671f84877af18ffd22b4c428 172.38.0.12:6379
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
M: 348dc3b13714d0b07236c2ba6c5147f270b08800 172.38.0.13:6379
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
S: 6fc86fc554f1f939564e6acc346da222a886ab6a 172.38.0.14:6379
   slots: (0 slots) slave
   replicates 348dc3b13714d0b07236c2ba6c5147f270b08800
S: 2a2fe251d41085ec7eb53e9bf4e4c749e5d9dbb9 172.38.0.15:6379
   slots: (0 slots) slave
   replicates 9c109831a0afd33f7c13500caf39d3191a13e0b3
M: 5d34f8422f8b68ea87bd2f8388c686fdbcfdc9a1 172.38.0.17:6379
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: 9068998c9b5cd5e4cca939738cc42a2954770b47 172.38.0.16:6379
   slots: (0 slots) slave
   replicates 0100361c6056686b671f84877af18ffd22b4c428
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

## 为什么172.38.0.17是3个新的区间,以前的还是连续?
## 重新分配成本太高,所以前3家各自匀出来一部分,从三个旧节点分别匀出1364个坑位给新节点172.38.0.17 

# 7、为主节点172.38.0.17分配从节点172.38.0.18
# redis-cli  --cluster add-node  ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
redis-cli --cluster add-node 172.38.0.18:6379 172.38.0.17:6379 --cluster-slave --cluster-master-id 3a732104b11d3cf81d1128def9f0158fb5708ca7 

# 8、检查集群情况第3次
redis-cli --cluster check 172.38.0.18:6379

4.4 主从缩容

bash 复制代码
# 1、将172.38.0.17和172.38.0.18下线
# 2、检查集群情况 获得172.38.0.18的从节点ID
redis-cli --cluster check 172.38.0.11:6379

# 3、将172.38.0.18从节点删除 从集群中将4号从节点172.38.0.18删除
# redis-cli --cluster  del-node  ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 172.38.0.18:6379 bdf8a5114bbad6d400aa8b1a5e3f29b174d6676e
## 检查一下发现只剩下7台机器了
redis-cli --cluster check 172.38.0.11:6379

# 4、将172.38.0.17的槽号清空,重新分配,本例将清出来的槽号都给172.38.0.11
redis-cli --cluster reshard 172.38.0.11:6379

How many slots do you want to move (from 1 to 16384)?4096
# 172.38.0.11的id
What is the receiving node ID? edf165b5d01f1a1f276237517d391c86c32d9f93
# 172.38.0.17的id
Source node #1: 3a732104b11d3cf81d1128def9f0158fb5708ca7
Source node #2: done

# 5、检查集群情况第二次
redis-cli --cluster check 172.38.0.11:6379
# 4096个槽位都指给172.38.0.11,它变成了8192个槽位,相当于全部都给172.38.0.11了,不然要输入3次,一锅端 

# 6、将172.38.0.17删除
# redis-cli --cluster del-node ip:端口 172.38.0.17节点ID
redis-cli --cluster del-node 172.38.0.17:6379 3a732104b11d3cf81d1128def9f0158fb5708ca7

# 7、检查集群情况第三次
redis-cli --cluster check 172.38.0.11:6379

5、MongoDB安装

yaml 复制代码
version: '3'
services:
  mongo:
    image: mongo:5.0.9
    container_name: mongo
    restart: always
    ports:
      - 27017:27017
    volumes:
      - /etc/localtime:/etc/localtime #时区
      - ../mongodb/data/db:/data/db  #数据
      - ../mongodb/log:/var/log/mongodb  # 挂载日志目录
    #  - ./config:/etc/mongo #配置目录
    privileged: true
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root

  mongo-express:
    image: mongo-express:0.54
    container_name: mongo-express
    restart: always
    ports:
      - 8079:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: root
      ME_CONFIG_MONGODB_URL: mongodb://root:root@mongo:27017/

添加管理员

  • 数据库用户角色:read、readWrite;
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  • 备份恢复角色:backup、restore;
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:root
  • 系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
bash 复制代码
# 登录并切换db到admin
$ docker exec -it mongo mongo admin

# 登录root用户,如果前面没有创建root用户可跳过此步
> db.auth('root','123456')

# 创建所有数据库管理用户 admin/123456
> db.createUser({user:'admin',pwd: '123456',roles:[{role:"userAdminAnyDatabase", db:"admin"}, "readWriteAnyDatabase"]});
# Successfully added user: { ...

# 使用新用户登录,返回 0=失败 1=成功
> db.auth('admin', '123456')
# 1

# 创建测试库
> use testdb
# 插入测试数据
> db.testdb.insert({"name":"testdb"})
# 创建用户并授权,dbOwner代表数据库所有者角色,拥有最高该数据库最高权限。
> db.createUser({ user:"user_testdb", pwd:"123456", roles: [{ role:"readWrite", db:"testdb" }] })
> 
# 退出数据库
> exit

6、MiniO安装

yaml 复制代码
version: '3'
services:
  minio:
    image: minio/minio:RELEASE.2022-03-26T06-49-28Z
    hostname: "minio"
    ports:
      - "9000:9000" # api 端口
      - "9001:9001" # 控制台端口
    environment:
      MINIO_ACCESS_KEY: root    #管理后台用户名
      MINIO_SECRET_KEY: rootroot #管理后台密码,最小8个字符
    volumes:
      - ../minio/data:/data               #映射当前目录下的data目录至容器内/data目录
      - ../minio/config:/root/.minio/     #映射配置目录
    command: server --console-address ':9001' /data  #指定容器中的目录 /data
    privileged: true
    restart: always
    logging:
      options:
        max-size: "50M" # 最大文件上传限制
        max-file: "10"
      driver: json-file

7、Nacos安装

yaml 复制代码
# 外置数据库
version: "3"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone-mysql
    env_file:
      - ../nacos/nacos-standlone-mysql.env
    volumes:
      - ../nacos/standalone-logs/:/home/nacos/logs
      - ../nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    restart: always

设置配置文件

bash 复制代码
# 同级目录下的.env
NACOS_VERSION=v2.0.4

# ../nacos/nacos-standlone-mysql.env
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.31.28
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

8、其他常用软件

Docker安装基本应用

最全的Docker-compose应用部署

相关推荐
学传打活5 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活10 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16818 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心20 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055271 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055271 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝1 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u0103055271 个月前
Java图像处理实战指南
人工智能·1024程序员节
u0103055271 个月前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节