获取安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl restart docker
systemctl status docker
systemctl enable docker
docker info
docker images
官方镜像仓库
比如redis:https://hub-stage.docker.com/search?q=redis
加速器地址 :https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
1.阿里云控制台搜索容器镜像服务
2.进入容器镜像服务, 左侧最下方容器镜像服务中复制加速器地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
参考:https://www.php.cn/faq/538357.html
docker images 查看docker镜像列表
docker run 镜像名 运行镜像
docker ps 查看当前启动的容器,增加-a 参数查看包括停止的实例
docker stop 容器ID 停止一个容器
docker start 容器ID 启动一个已经停止的容器实例
docker restart 容器ID 不管容器是否启动,直接重启容器
docker rm 容器ID 删除实例
docker rmi 镜像名 删除镜像
docker pull 镜像名 下载镜像
docker kill 容器ID 直接关闭容器
docker info 查看容器信息,包括镜像源
docker image inspect 镜像id 查看镜像详情信息
docker search 名称 模糊搜索镜像
docker logs 容器id 查看容器日志
sudo systemctl restart docker重启docker
systemctl status docker 查看容器状态
docker inspect 容器id 查看容器详情信息,重点看Mounts那一部分,容器内Destination的值挂载到宿主机Source的值中
docker exec -it 容器ID /bin/bash 进入正在运行的docker容器里面
docker pull redis
不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源
下载后可以使用docker images命令查看镜像文件
mkdir -p /usr/local/redis/conf
从官网http://download.redis.io/redis-stable/redis.conf获取redis.conf
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
并上传到挂载目录下
docker run --name redis --restart=always -p 6379:6379 -v /usr/local/redis/conf:/etc/redis -v /usr/local/redis/data:/data -d redis redis-server /etc/redis/redis.conf --requirepass "123456" --appendonly yes
命令解释说明:
--name redis //指定该容器别名
--restart=always //随docker启动
-p 6379:6379 //端口映射:前表示主机部分,:后表示容器部分。
-v //挂载目录,规则与端口映射相同。
-d redis //后台模式启动redis,后面还有参数,不能放在前面
redis-server /etc/redis/redis.conf //以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/redis/conf/redis.conf
--requirepass "123456" //设置密码为123456
--appendonly yes //开启redis的AOF持久化,默认为false,不持久化
使用docker ps 查看redis已经运行了
使用 docker exec -it redis /bin/bash进入redis
使用 redis-cli 可以测试连接
放在自定义的目录下:wget -c http://download.redis.io/redis-stable/redis.conf
--name:自定义启动容器名称
-v 主机redis.conf 和redis容器做映射
-d 后台启动
-p 端口映射 6379是redis端口 27000是哨兵端口 redis:镜像名称
docker run --name redis_3 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6381:6379 -p 27002:27000 redis
docker run --name redis_2 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 -p 27001:27000 redis
docker run --name redis_1 -v /usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 -p 27000:27000 redis
docker exec -it 容器id /bin/bash
docker exec -it ac23cca1c700 /bin/bash
执行redis-cli进入redis,输入:info 命令显示都是master,因为现在刚创建出来都是单机的
这里使用到的IP是容器里的IP,可以通过:docker inspect redis_1查看容器映射出来的ip。
我们这里把redis_1设置为主,redis_2,redis_3设置为从。
进入redis_2容器,打开redis-cli,输入 SLAVEOF IP PORT
即可完成主机的绑定,再次执行INFO命令就可以看到角色发生了变化,且主机也显示了
redis_3也这样执行。
执行完我们进入redis_1中,执行INFO可以看到主从关系已经生效:
在redis_1中执行set命令,我们去redis_2,redis_3中看下能否获取到。
这里需要注意的一点,SLVAE角色的redis只能读取不能set的。 只有master才能读写。
1.进入三个redis容器,在容器的根目录下创建sentinel.conf文件。vim sentinel.conf。写入以下配置:
容器内先安装vim
apt-get update
apt-get install -y vim
port 26381 #哨兵端口号 一定要和启动命令映射第二个端口号一致 26379 26380 26381
daemonize yes #后台启动
sentinel monitor master_redis 主节点ip 主节点端口 2 #这里的ip也是master容器映射出来的ip 端口是master映射到外面的端口 6379 最后的2表示 有2两个哨兵
2: 执行这个配置文件:redis-sentinel sentinel.conf
查看运行的sentinel进程:在容器里安装ps命令,apt-get install procps
安装成功之后,ps -ef 看到sentinel进程已经启动了。
可以看到三个容器的哨兵进程都启动了
参考:https://www.cnblogs.com/krock/p/14283469.html
Redis Sentinel
,即Redis
哨兵,在Redis 2.8版本开始引入。能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,既故障转移。
为了哨兵的高可用性,常以哨兵集群形式搭建哨兵,如下是三个哨兵组成的集群:
根据官方文档的介绍:
Monitoring
):哨兵会不断地检查主节点和从节点是否运作正常。Automatic failover
):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。Configuration provider
):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。Notification
):哨兵可以将故障转移的结果发送给客户端。编写哨兵模式配置文件sentinel.conf(在redis的bin 目录下有一个redis.sentinel文件,这个文件用于启动哨兵的配置文件),wget http://download.redis.io/redis-stable/sentinel.conf
准备三个配置文件,修改三个文件监听端口为port 27000, port 27001, port 27002
# 关闭保护模式
protected-mode no
# 哨兵的监听端口
port 27000
# 让sentinel服务后台运行(docker的话需要设置为no,非docker运行设置为yes, 因为docker有个-d属性就是让在后台运行的)
daemonize no
# 当Redis哨兵以守护进程的方式运行的时候,默认会把pid文件放在/var/tmp/sentinel1.log,也可以配置到其他地址,多个哨兵需要重命名文件。
pidfile /var/run/redis-sentinel.pid
loglevel notice
#日志文件的路径
logfile "./sentinel.log"
#sentinel的工作目录
dir "/tmp"
# 哨兵sentinel监控的redis主节点的
## ip:主机ip地址.注:如果在一个机器里创建多个容器,ip为容器的ip,如果在不同机器上,则为机器的ip地址)
## port:哨兵端口号
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。)
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联,那么这时客观上认为主节点失联了,就进行failover(故障转移),
## 选举过程中,超过或等于这个票数的主节点变成被认为客观下线,从节点被选举为主节点。
# sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
# 当在Redis实例中开启了requirepass ,所有连接Redis实例的客户端都要提供密码。
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
#超过30秒master还没有连接上,则认为master已经停止
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
#设置故障转移超时时间
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no
指定配置文件目录映射
[root@localhost conf]# docker run -p 27000:27000 \
--name sentinel1 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel1.conf
[root@localhost conf]# docker run -p 27001:27001 \
--name sentinel2 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel2.conf
[root@localhost conf]# docker run -p 27002:27002 \
--name sentinel3 \
-v /usr/local/redis/conf:/usr/local/etc/redis \
-d redis redis-sentinel /usr/local/etc/redis/sentinel3.conf
查看哨兵启动成功
[root@localhost conf]# docker ps
可以看到哨兵的状态是正确的,发现了1个主节点,2个从节点,3个哨兵。
[root@localhost conf]# docker exec -it sentinel3 /bin/bash
root@3222f481fa01:/data# redis-cli -p 27000
127.0.0.1:27000> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.xxxx.xxxx:6379,slaves=2,sentinels=3
查看哨兵日志
[root@localhost conf]# docker exec -it sentinel1 bash
root@d289ca792587:/data# cat ./sentinel.log
哨兵搭建参考:
docker 搭建简单的Redis哨兵模式(接redis主从复制) - 简书
https://zhuanlan.zhihu.com/p/647382777
利用docker搭建redis哨兵模式_幻想变成有钱人的小吴的博客-CSDN博客
1、关闭防火墙
systemctl stop firewalld
2、开启防火墙
systemctl start firewalld
3、关闭开机启动
systemctl disable firewalld
4、开启开机启动
systemctl enable firewalld
5、开启某个端口(如:2231端口)
firewall-cmd –zone=public –add-port=19080/tcp –permanent
firewall-cmd –reload
6、查询端口号(如:2231端口) 是否开启:
firewall-cmd –query-port=2231/tcp
7、查询有哪些端口是开启的:
firewall-cmd –list-port
8.查看防火状态
systemctl status firewalld
修改防火墙信息后记得重启容器systemctl restart docker