Docker & Docker安装基本应用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 快速安装Docker中的基本应用软件, 快速入门

三、Docker安装基本应用

1、安装Nginx

# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run --name nginx-app \
-v /app/nginx/html:/usr/share/nginx/html:ro \
-v /app/nginx/conf:/etc/nginx
-d nginx:1.20.1

# nginx目录放在/opt/docker/下

# 随便启动一个 nginx 实例,只是为了复制出配置
docker run -p 80:80 -p 443:443 --name nginx443 -d nginx:1.20.1

mkdir -p /usr/local/docker/nginx/html
mkdir -p /usr/local/docker/nginx/logs
mkdir -p /usr/local/docker/nginx/conf


# 复制到/opt/docker/temp下
docker container cp nginx:/etc/nginx /opt/docker/temp 
# 比如
docker container cp 8662e037621d:/etc/nginx /usr/local/docker/nginx/conf/

mv /usr/local/docker/nginx/conf/nginx/*  /usr/local/docker/nginx/conf

rm -rf /opt/docker/temp

docker stop nginx

docker rm $Containerid

docker run -p 80:80 --name nginx \
 -v /opt/docker/nginx/html:/usr/share/nginx/html \
 -v /opt/docker/nginx/logs:/var/log/nginx \
 -v /opt/docker/nginx/conf/:/etc/nginx \
 -d nginx:1.10

 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

2、安装MySQL

1、单机安装

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

docker run -p 4408:3306 --name mysql57-app \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=xUeMysqlPass \
-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-app \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \ 
-d mysql

docker run -d --name mysql \-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \-v /usr/local/docker/mysql/mysql:/etc/mysql \-v /usr/local/docker/mysql/logs:/var/log/mysql \-v /usr/local/docker/mysql/data/:/var/lib/mysql \mysql:5.7 --lower_case_table_names=1
# 新建 my.cnf (/usr/local/mysql/conf)
[client]
default_character_set=utf8 
[mysqld] 
collation_server = utf8_general_ci 
character_set_server = utf8 


docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

2、安装mysql主从复制

# 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
vim 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
vim 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; 

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;

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、在从数据库中开启主从同步
start slave;

# 13、查看从数据库状态发现已经同步

3、安装Redis

1、单机安装

# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
appendonly yes
#更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
-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 run  -p 6379:6379 --name myredis --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 

# 可以提前准备redis的原厂配置
# 修改以下属性即可
# 开启redis验证     可选 
requirepass 123
# 允许redis外地连接  必须 

#注释掉 
# bind 127.0.0.1

#将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败 
daemonize no 

开启redis数据持久化  appendonly yes  可选

2、集群安装

# 1、新建6个docker容器redis实例
## --net host 使用宿主机的IP和端口,默认
## --privileged=true 获取宿主机root用户权限
## --cluster-enabled yes 开启redis集群
## --appendonly yes 开启持久化

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381

docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384

docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

[root@k8s-node01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ddf96486e225        redis:6.0.8         "docker-entrypoint.s…"   3 seconds ago       Up 3 seconds                            redis-node-6
d57db8d161fd        redis:6.0.8         "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds                            redis-node-5
77eafa6d8c7c        redis:6.0.8         "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds                            redis-node-4
10d1ee880364        redis:6.0.8         "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds                            redis-node-3
f6022234fd1d        redis:6.0.8         "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds                            redis-node-2
ca53aa9f1845        redis:6.0.8         "docker-entrypoint.s…"   16 seconds ago      Up 15 seconds                           redis-node-1

# 2、进入容器redis-node-1并为6台机器构建集群关系
docker exec -it redis-node-1 /bin/bash
#注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址 
redis-cli --cluster create 139.198.28.196:6381 139.198.28.196:6382 139.198.28.196:6383 139.198.28.196:6384 139.198.28.196:6385 139.198.28.196:6386  --cluster-replicas 1

## --cluster-replicas 1 表示为每个master创建一个slave节点 
## 根据提示输入 yes
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 139.198.28.196:6385 to 139.198.28.196:6381
Adding replica 139.198.28.196:6386 to 139.198.28.196:6382
Adding replica 139.198.28.196:6384 to 139.198.28.196:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
   slots:[0-5460] (5461 slots) master
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
   slots:[5461-10922] (5462 slots) master
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
   slots:[10923-16383] (5461 slots) master
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
   replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
   replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
   replicates f9a9d79d384861a899b37b2012f13846bc43d83e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
   slots: (0 slots) slave
   replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
   slots: (0 slots) slave
   replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
   slots: (0 slots) slave
   replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

# 3、连接进入6381作为切入点,查看集群状态
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381
cluster info

127.0.0.1:6381> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:249
cluster_stats_messages_pong_sent:271
cluster_stats_messages_sent:520
cluster_stats_messages_ping_received:266
cluster_stats_messages_pong_received:249
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:520


cluster nodes

127.0.0.1:6381> cluster nodes
f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382@16382 master - 0 1641719386000 2 connected 5461-10922
70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385@16385 slave edf165b5d01f1a1f276237517d391c86c32d9f93 0 1641719384000 1 connected
b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386@16386 slave f9a9d79d384861a899b37b2012f13846bc43d83e 0 1641719385000 2 connected
f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383@16383 master - 0 1641719383000 3 connected 10923-16383
c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384@16384 slave f775463e061e9c32d48f6d0afd9d4916ead686fa 0 1641719386738 3 connected
edf165b5d01f1a1f276237517d391c86c32d9f93 10.140.122.28:6381@16381 myself,master - 0 1641719382000 1 connected 0-5460

3、主从扩容


# 1、新建63876388两个节点+新建后启动+查看是否8节点
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

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

# 3、将新增的6387节点(空槽号)作为master节点加入原集群
将新增的6387作为master节点加入集群
redis-cli --cluster  add-node  自己实际IP地址: 6387  自己实际IP地址: 6381 
6387 就是将要作为master新增节点 
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群 

redis-cli --cluster add-node 139.198.28.196:6387 139.198.28.196:6381

# 4、检查集群情况第1次
redis-cli --cluster check 139.198.28.196:6381 
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 5461 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 5462 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 5461 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 0 slots | 0 slaves.

6387暂时没有槽号

# 5、重新分派槽号
redis-cli --cluster reshard 139.198.28.196:6381

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

# 6、检查集群情况第2次
redis-cli --cluster check 139.198.28.196:6381
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 4096 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
   slots: (0 slots) slave
   replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
   slots: (0 slots) slave
   replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
   slots: (0 slots) slave
   replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
M: 3a732104b11d3cf81d1128def9f0158fb5708ca7 139.198.28.196:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

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

# 7、为主节点6387分配从节点6388
redis-cli  --cluster add-node  ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli --cluster add-node 139.198.28.196:6388 139.198.28.196:6387 --cluster-slave --cluster-master-id 3a732104b11d3cf81d1128def9f0158fb5708ca7 
## 这个是6387的编号,按照自己实际情况 

# 8、检查集群情况第3次
redis-cli --cluster check 139.198.28.196:6381
root@k8s-node01:/data# redis-cli --cluster check 139.198.28.196:6381
139.198.28.196:6381 (edf165b5...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6382 (f9a9d79d...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6383 (f775463e...) -> 0 keys | 4096 slots | 1 slaves.
139.198.28.196:6387 (3a732104...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 139.198.28.196:6381)
M: edf165b5d01f1a1f276237517d391c86c32d9f93 139.198.28.196:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
M: f9a9d79d384861a899b37b2012f13846bc43d83e 139.198.28.196:6382
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: 76edd8aa5b95afb268873f5b3131fb4077277efc 139.198.28.196:6388
   slots: (0 slots) slave
   replicates 3a732104b11d3cf81d1128def9f0158fb5708ca7
S: 70fdcbfd740408267c2f121835e9e38c79e564d5 139.198.28.196:6385
   slots: (0 slots) slave
   replicates edf165b5d01f1a1f276237517d391c86c32d9f93
S: b0bbc5373ce8b238fe0e07fcbf63d1dd225c5664 139.198.28.196:6386
   slots: (0 slots) slave
   replicates f9a9d79d384861a899b37b2012f13846bc43d83e
M: f775463e061e9c32d48f6d0afd9d4916ead686fa 139.198.28.196:6383
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
S: c6a6fc3c1998f285eeea44b1f7c6869782393a88 139.198.28.196:6384
   slots: (0 slots) slave
   replicates f775463e061e9c32d48f6d0afd9d4916ead686fa
M: 3a732104b11d3cf81d1128def9f0158fb5708ca7 139.198.28.196:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

4、主从缩容

# 1、将63876388下线

# 2、检查集群情况 获得6388的节点ID
redis-cli --cluster check 139.198.28.196:6381
76edd8aa5b95afb268873f5b3131fb4077277efc

# 3、将6388删除 从集群中将4号从节点6388删除
redis-cli --cluster  del-node  ip:从机端口 从机6388节点ID

redis-cli --cluster del-node  139.198.28.196:6388 76edd8aa5b95afb268873f5b3131fb4077277efc

redis-cli --cluster check 139.198.28.196:6381
## 检查一下发现,6388被删除了,只剩下7台机器了。

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


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

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

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

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

4、安装ElasticSearch

#准备文件和文件夹,并chmod -R 777 xxx
#配置文件内容,参照
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/node.name.html 搜索相
关配置
# 考虑为什么挂载使用esconfig ...
docker run --name=elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms300m -Xmx300m" \
-v /app/es/data:/usr/share/elasticsearch/data \
-v /app/es/plugins:/usr/shrae/elasticsearch/plugins \
-v esconfig:/usr/share/elasticsearch/config \
-d elasticsearch:7.12.0

#######################################

docker pull elasticsearch:7.4.2  存储和检索数据
docker pull kibana:7.4.2 可视化检索数据    

mkdir -p /opt/docker/elasticsearch/config # 用来存放配置文件
mkdir -p /opt/docker/elasticsearch/data  # 数据
echo "http.host: 0.0.0.0" >/opt/docker/elasticsearch/config/elasticsearch.yml # 允许任何机器访问
chmod -R 777 /opt/docker/elasticsearch/ ## 设置elasticsearch文件可读写权限

# 启动es
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e  "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /opt/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v  /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

#以后再外面装好插件重启就可

#特别注意:
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \ 测试环境下,设置 ES 的初始内存和最大内存,否则导致过大启动不了ES

# 开机启动
docker update elasticsearch --restart=always

# 启动kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://42.192.52.168:9200 -p 5601:5601 -d kibana:7.4.2

http://42.192.52.168:9200 改成自己Elasticsearch上的地址

5、安装Tomcat

# 考虑,如果我们每次 -v 都是指定磁盘路径,是不是很麻烦?
docker run --name tomcat-app -p 8080:8080 \
-v tomcatconf:/usr/local/tomcat/conf \
-v tomcatwebapp:/usr/local/tomcat/webapps \
-d tomcat:jdk8-openjdk-slim-buster

6、安装dubbo-admin

docker run -d \
--name dubbo_admin \
-p 8083:8080 \
-e dubbo.registry.address=zookeeper://172.16.253.50:2181 \
-e dubbo.admin.root.password=root \
-e dubbo.admin.guest.password=root \
chenchuxin/dubbo-admin

7、安装activemq

docker run --name='activemq' \
  -itd \
  -p 8161:8161 \
  -p 61616:61616 \
  -e ACTIVEMQ_ADMIN_LOGIN=admin \
  -e ACTIVEMQ_ADMIN_PASSWORD=admin \
  --restart=always \
  -v activemq_data:/data/activemq \
  -v activemq_log:/var/log/activemq \
  -v activemq_conf:/opt/activemq/conf \
  webcenter/activemq:latest

8、YAPI

# 启动 MongoDB
docker run -d --name mongo-yapi mongo

# 获取yapi镜像
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi

# 初始化数据库索引及管理员账号
docker run -it --rm \
  --link mongo-yapi:mongo \
  --entrypoint npm \
  --workdir /api/vendors \
  registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  run install-server

# 启动yapi服务
docker run -d \
  --name yapi \
  --link mongo-yapi:mongo \
  --workdir /api/vendors \
  -p 3000:3000 \
  registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
  server/app.js

9、RabbitMQ

docker search rabbitmq

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

docker exec -it 镜像ID /bin/bash
# 开启Web-UI后台界面
rabbitmq-plugins enable rabbitmq_management

http://linuxip地址:15672,用户名和密码默认都是guest

# stats in management UI are disabled on this node
docker exec -it {
   rabbitmq容器名称或者id} /bin/bash
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 重启容器

docker pull rabbitmq:3.9.15-management
docker run -d --name=rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3.9.15-management
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
前端开发 jenkins 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-前端项目发布(五)
|
1天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
|
1天前
|
Java 开发工具 git
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
10 4
|
1天前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
|
1天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
12 0
|
1天前
|
安全 Linux 网络安全
安装docker
安装docker
14 0
|
1天前
|
网络协议 Linux Docker
在centos7下通过docker 安装onlyoffice
在centos7下通过docker 安装onlyoffice
|
2天前
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
10 0
|
2天前
|
NoSQL Linux Redis
本地虚拟机centos7通过docker安装主从redis3.2
本地虚拟机centos7通过docker安装主从redis3.2
|
2天前
|
关系型数据库 MySQL Linux
本地虚拟机centos7通过docker安装主从mysql5.7.21
本地虚拟机centos7通过docker安装主从mysql5.7.21
10 0