1、总体步骤
- 搜索镜像
docker search 镜像
- 拉取镜像
docker pull 镜像
- 查看镜像
docker images
- 启动镜像(服务端口的映射)
docker run -it -p 8080:8080 tomcat
- 停止容器
- 移除容器
5、安装Redis
5.1、搜索镜像
# 从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
docker search redis:6.0.8
Docker
挂载主机目录Docker
访问出现cannot open directory .: Permission denied
解决办法: 在挂载目录后多加一个--privileged=true
参数即可
5.2、新建目录
# 在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
5.3、拷贝文件
# 将一个redis.conf文件模板拷贝进/app/redis目录下
cp /myredis/redis.conf /app/redis/
5.4、修改文件
# 1、开启redis验证(可选)
requirepass 123
# 2、允许redis外地连接(必须)
注释掉 # bind 127.0.0.1
# 3、将daemonize yes注释起来或者 daemonize no设置,
# 因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no
# 4、开启redis数据持久化(可选)
appendonly yes
5.5、运行镜像
docker run -p 6379:6379 --name myr3 --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v /app/redis/data:/data
-d redis:6.0.8 redis-server /etc/redis/redis.conf
5.6、连接容器
docker exec -it redis容器 redis-cli
6、Redis(Cluster)集群
6.1、关闭防火墙+启动Docker
6.2、新建6个docker容器redis实例
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
详解
docker run
: 创建并运行docker
容器实例;--name redis-node-6
: 容器名字;--net host
: 使用宿主机的IP和端口;--privileged=true
: 获取宿主机root
用户权限;-v /data/redis/share/redis-node-6:/data
: 容器卷,宿主机地址:docker内部地址
;redis:6.0.8
:redis
镜像和版本号;--cluster-enabled yes
: 开启redis
集群;--appendonly yes
: 开启持久化;--port 6386
:redis
端口号。
6.3、进入容器
docker exec -it redis-node-1 /bin/bash
6.4、构建主从关系
# 注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
# --cluster-replicas 1 表示为每个master创建一个slave节点
redis-cli --cluster create
192.168.111.147:6381
192.168.111.147:6382
192.168.111.147:6383
192.168.111.147:6384
192.168.111.147:6385
192.168.111.147:6386
--cluster-replicas 1
6.5、进入6381作为切入点,查看集群状态
# 集群信息
cluster info
# 节点信息
cluster nodes
6.6、查看集群信息
redis-cli --cluster check 192.168.111.147:6381
6.7、主从扩容
6.7.1、新建两个节点并启动
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
6.7.2、进入6387实例
docker exec -it redis-node-7 /bin/bash
6.7.3、将新增的6387节点作为master节点加入集群
# 将新增的6387作为master节点加入集群
# 6387 就是将要作为master新增节点
# 6381 就是原来集群节点里面的领路人,相当于6387通过6381的码头从而找到组织加入集群
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6.7.4、检查集群情况
redis-cli --cluster check 真实ip地址:6381
6.7.5、重新分配槽号
# 重新分派槽号
# 通用
redis-cli --cluster reshard IP地址:端口号
# example
redis-cli --cluster reshard 192.168.111.147:6381
6.7.6、检查集群
redis-cli --cluster check 真实ip地址:6381
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
6.7.7、主节点分配从节点
# 通用
redis-cli --cluster add-node ip:新slave端口 ip:新master端口
--cluster-slave --cluster-master-id 新主机节点ID
# e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况
redis-cli --cluster add-node 192.168.111.147:6388 192.168.111.147:6387
--cluster-slave --cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451
6.7.8、检查集群
redis-cli --cluster check 192.168.111.147:6382
6.8、主从缩容
6.8.1、检查6388节点的Id
redis-cli --cluster check 192.168.111.147:6382
6.8.2、删除6388节点
# 通用
redis-cli --cluster del-node ip:从机端口 从机6388节点ID
# example
redis-cli --cluster del-node 192.168.111.147:6388 5d149074b7e57b802287d1797a874ed7a1a284a8
6.8.3、检测节点是否删除
redis-cli --cluster check 192.168.111.147:6382
6.8.4、重新分配
redis-cli --cluster reshard 192.168.111.147:6381
6.8.5、检测集群
# 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端
redis-cli --cluster check 192.168.111.147:6381
6.8.6、删除6387节点
# 通用
redis-cli --cluster del-node ip:端口 6387节点ID
# example
redis-cli --cluster del-node 192.168.111.147:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451
6.8.7、检查集群
redis-cli --cluster check 192.168.111.147:6381