前言
docker容器化安装的好处就是可以几条命令快速安装,可以在同一个linux同时运行多个Redis,相互之间不会影响。配置坏了,轻松删除容器,重新运行容器。
安装Docker和Docker的基础操作详解:https://blog.csdn.net/qq_43290318/article/details/107743188
1、拉取最新镜像
我拉取的最新镜像的版本号是: 6.0.9
# 拉取最新的镜像
docker pull redis
# 查看所有镜像
docker images
# 删除某个镜像。其中 -f 表示强制删除
docker rmi -f 镜像名/id
4、去官网下载对应版本的配置文件
Redis官网:https://redis.io/
由于Docker运行的Redis容器里面并没有找到配置文件redis.conf,所以我们需要从官网下载对应版本的Redis压缩包,然后将redis.conf传到我们的Linux上。
3、运行Redis容器
完整命令:
docker run --privileged=true -v /data/redis/redis.conf:/usr/local/bin/redis.conf -v /data/redis/data:/data -p 6379:6379 --name redis01 -d redis redis-server /usr/local/bin/redis.conf
参数解析:
1、--privileged=true :加了这个参数,容器内的root拥有真正的root权限。这里加上,下面需要测试。一般我也建议加上
2、-p 6379:6379 :宿主机和容器的端口映射,这里直接都采用Redis默认的监听端口
3、--name redis01: 为容器取名为redis01
4、-d:后台运行容器,并返回容器的完整id(即启动守护式容器)
由于运行Redis容器后,它启动一个日志进程,所以这里的 -d,无需搭配 -it 使用。如果想理解清楚,请参看 前言 中的博客。
5、-v /data/redis/redis.conf:/usr/local/bin/redis.conf -v /data/redis/data:/data
挂载Redis的配置文件和数据目录。冒号左边是宿主机目录,冒号右边是容器内部路径!
(1)如果不挂载配置文件,我们要修改Redis容器的配置,需要将配置文件从宿主机复制到Redis容器内部,然后进入容器内部修改配置文件,而Redis容器内并没有vim这些文本编辑器,虽然可以安装但是有点麻烦。
(2)那我们怎么知道Redis容器里面的配置文件和核心文件放在哪?所以,我们可以随便 docker run 一个Redis容器,然后进入到里面看看,了解一下大概的目录结构。在容器内部的 /usr/local/bin 下面我们看到了熟悉的 redis-cli 和 redis-server,但是并没有找到 配置文件 redis.conf (下图是我挂载之后才有的,原本没有的)。
为了证实容器内,确实没有 redis.conf 。我们可以通过命令进行全盘搜索:
# 进入redis03容器内部,并返回一个终端 # 它与 docker attach 有什么区别,请参看 前言 中的博客 docker exec -it redis03 /bin/bash # 全盘搜索redis.conf find / -name 'redis.conf'
注意,如果一开始运行容器时没有加上--privileged=true参数,那么搜索时被有些目录拒绝访问,因为不够权限。
查看容器redis01的日志:docker logs redis01
4、修改宿主机中的redis.conf
配置文件详解:https://www.cnblogs.com/metu/p/9609604.html
在这里我们只需要修改以下参数就够了:
bind 127.0.0.1 # 注释掉这部分,这是限制redis只能本地访问
protected-mode no # 默认yes,开启保护模式会限制为本地访问
port 6379 # redis监听的端口号
daemonize no # 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
databases 16 # 数据库个数(可选),可以改改看,看看能不能生效
appendonly yes # redis持久化(可选)
requirepass *** # 连接时需要输入的密码
5、重新启动容器让配置生效
修改并保存了宿主机中的redis.conf。我们验证一下,此时运行中的容器内部的redis.conf是否也同时被修改了?
# 进入容器 docker exec -it redis01 /bin/bash # 查看配置文件的密码是否已修改 cat /usr/lcoal/bin/redis.conf | grep 'requirepass'
应该看到我们修改的密码并没有生效。此时我们需要退出容器,并重启容器
docker restart redis01
此时,我们再去查看容器内的配置文件,发现生效了。
6、使用RedisDesktopManager远程连接
RedisDesktopManager现在收费了。我在网上找到了一个RedisDesktopManager的修改版,体验更好。https://github.com/qishibo/AnotherRedisDesktopManager/releases
注意,如果是连接云服务器上的Redis,不要忘了在安全组中开放Redis的监听端口。