前言
本文章已经默认已经安装好了docker,不会安装docker的自行去找文章攻克。
拉取镜像
本人拉取最新版本的额镜像启动不了redis,所以只能拉取6.0.6版本的redis
docker pull redis:6.0.6
创建容器
拉取镜像之后不要着急,需要去下载redis.conf配置文件,这个配置文件在redis中是默认不存在的,需要去官网下载 redis.conf。下载完成之后需要将改文件上传到服务器上,本文章不采用创建数据卷具名的方式进行挂载。所以在根目录下创建文件夹
cd ~
# 先进入根目录
mkdir docker/redis/conf docker/redis/data -p
# -p表示逐级创建目录,分别创建了conf,data两个目录,接下来将redis.conf文件放入到conf目录下
将redis.conf放入到conf目录下后,对redis.conf进行修改,这里需要修改的配置信息可以参考这篇文章。然后就是根据镜像创建容器,并且启动它
docker run -p 6379:6379 --name redis \
-v ~/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v ~/docker/redis/data:/data \
-d redis:6.0.6 \
redis-server /etc/redis/redis.conf
对上述命令进行解释,-p 6379:6379,前面的6379表示的是主机的端口号,后者的表示容器内部的端口号,也就是通过访问主机端口号来访问容器内部的端口号;–name是对这个容器进行取名字;-v 需要注意的是,~/docker/redis/conf/redis.conf 表示的主机上的这个文件,一般情况下都是要确定到文件,而后面对应的:/etc/redis/redis.conf指的是容器中的目录,也就是说,主机上的redis.conf这个文件映射到容器中redis.conf的目录,那么主机的redis.conf文件就会取代容器里的redis.conf目录。
如图所示,进入到容器内部后,cd到redis.conf,会提示Not a directory(不是一个目录)。-d redis:6.0.6表示的是对应的镜像,-d则是表示后台启动;redis-server /etc/redis/redis.conf 指的是启动容器参考容器内部 /etc/redis/路径下的redis.conf配置文件。至此就已经启动完毕了。
额外的小知识点
配置redis认证(密码)
在使用redis的过程中,最好是设置一个密码,需要用户进入后才可以访问redis,增加安全性。可以通过一下途径去设置一个密码
# 进入到容器内部,这里的redis是我的容器名
docker exec -it redis bash
# 进入到redis中
redis-cli -p 6379
# 配置密码为 tzc19@
config set requirepass tzc19@
# 获取设置的密码
config get requirepass
到这一步就已经完成了密码的设置,通过另外开一个redis-cli来访问redis会受到auth认证的处理。但是这里存在一个问题就是当redis重启的时候,密码就消失了。这里就需要到redis.conf里面去配置,永久保留密码
vim redis.conf
# 按住esc,输入/requriepass可以快速查找到位置,按n可以查找下一个,
# 在带有注解requirepass这里添加上一个 requirepass tzc19@ 也就是把密码设置为tzc19@。
# 然后重启redis即可
折磨我很久的小细节
在我数据挂载的时候,总是挂载没有成功,后来发现在根目录下创建的文件夹,需要在数据挂载的时候加上 ~ 符号,例如上述说明的。由于我之前没有注意,直接写成了 -v /docker/… 导致数据挂载一直失败。正确的写法应该如下
docker run -p 6379:6379 --name redis \
-v ~/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v ~/docker/redis/data:/data \
-d redis:6.0.6 \
redis-server /etc/redis/redis.conf