记录最近自己在玩docker部署redis时一些过程
1.部署redis
首先用docker部署redis时候的配置,可以通过两种方式来进行设置
-
启动时进行传参(几乎无用)
-
通过redis.conf配置文件启动 (主要,博主这里用的是6.2.13 )
下载地址:Download | Redis
镜像版本:
通过配置文件方式来对redis进行启动的话,首先有两个前提条件:
1) docker镜像版本和redis.conf来源版本尽量保持一致
2)配置文件中几个参数需要注意一下
参数名 | 值 | 描述 |
bind | 删除 | 该值个人理解是设置过之后只能由某个制定的ip服务器来进行请求;删除后就能够接受所有请求。(感觉在实际的生产部署上这个配置还需要好好研究一下) |
port | docker部署下一般不需要改动,默认的6379就行,该端口对应着容器内部对端口,对外端口可以在启动容器时设置 | |
daemonize | no | 默认为no,后台启动 |
requirepass | 密码也可以通过启动时来设置,我的建议是在云服务器上一定要设置上密码,不然几乎是99.9%会被植入挖矿代码,例如我被植入的:http://45.83.123.29/cleanfda/init.sh |
将上面设置好后既可以来启动redis容器了
docker run -p 6379:6379 -v /etc/redis6.2/redis-6379.conf:/etc/redis/redis.conf -v /data/redis:/data --name redis-master -d redis:6.2.13 redis-server /etc/redis/redis.conf
- -p 映射端口 前值为宿主机上对外端口,后值为容器内端口(ps:云服务器上想要外面连接记得开放防火墙,开放防火墙后一定要设置密码)
- -v 挂载目录 前值为本机目录,后值为容器内目录
- --name 容器名 启动名称,格式为--name ${myName} ${镜像名:版本号}
- -d 后台启动 如果发现run后容器并没有正常启动,可能是报错了,将-d去掉启动可以看到错误信息
- redis-server 服务启动命令,我这里指定了容器内redis.conf作为启动配置文件,容器内的文件是由-v /etc/redis6.2/redis-6379.conf:/etc/redis/redis-conf 该命令将宿主机配置文件挂载至容器内
至此应该就能正常启动redis容器了
输入命令尝试一下
报这个错误的话是因为有密码
输入 auth username xxxxxx即可 username默认是default
redis正常运行,查看一下挂载目录的文件是否正常, 一般redis默认开启了rdb备份,在项目正常关闭的时候会自动备份文件
容器内文件正常,看看宿主机上的目录上是否也有对应的文件
一切正常
2.数据恢复
测试流程: 正常启动redis->写入几条数据->正常重启->删除容器内dump.rdb文件->kill容器->文件放入挂在目录再重启
因为没有实际在工作中试验过,不知道实际是怎么去做的一个备份和恢复,只能自己瞎摸索这来,生产环境中应该还有定时任务定期将aof和rbd文件转移走进行备份,不然文件损坏的情况下很容易导致数据全盘丢失
在正常重启的情况下是一点问题都没有
模拟非正常结束,数据丢失的情况,先将dump.rdb改名为dump1.rdb 重启,发现还有数据,应该是根据aof文件恢复了数据,删除aof文件 直接kill掉容器,再次重启,数据成功丢失
哦豁,翻车了,首先第一次重启就没有数据,第二次restart的时候,因为正常重启的redis容器会触发rdb备份,可能这个时候rdb文件已经是没有数据的rdb文件了。 再来一次
先将dump文件转移,删除aof文件
然而还是翻车了, 献丑了,待老夫再研究研究机制再来看看