前言:
- 博主不光是在Windows下跑,在linux上也使用了相同流程跑了一遍,结果是一样的,可放心食用。
- "进阶版"时,博主遇到了麻烦,当时研究了将近两小时,所以,我们还是要坚持,加油!
在安装Redis之前,我们可以先查看一下我们的镜像,输入命令:
docker images
能发现,镜像里面有nginx和mysql,并没有redis
然后我们可以像上一篇安装mysql一样,安装redis镜像。
输入以下命令,安装redis镜像:
docker pull redis:7.0.8
最后看见:"Status: Downloaded newer image for redis:7.0.8",就代表下载成功。
再查看一下镜像,输入命令:
docker images
能看到,因为我们是指向下载"redis:7.0.8"版本,所以TAG标签给出的也是7.0.8
如果有的同学,使用的是 "latest"下载,那么TAG标签,也会给出 "latest"。
那么这时候,需要查看安装的镜像具体版本是多少,可以看一下这篇文章:
docker镜像latest具体是哪个版本_龙枫995的博客-CSDN博客_latest版本其实docker也有提供镜像具体版本的获取方式。docker 中 image 镜像管理image 中有一个inspect显示一个或多个图像的详细信息那么组合一下,就是这样:https://blog.csdn.net/longfeng995/article/details/128828905
以上,redis镜像就安装好了。
好的,镜像安装好后,同学们能发现,直接去启动redis 是不行的。
因为这只是镜像,我们还需要创建它的容器,并且启动容器才可以。
我们可以先查看一下容器,输入命令:
docker ps -a
可以看到,容器里什么都没有。
那么需要创建一个redis容器
输入下面的命令:
docker run --name redis-test -p 6379:6379 -d 镜像ID
命令中,各项参数解释:
run 在新容器中运行命令
--name 为容器分配一个名称。上面我们分配的名称就叫"redis-test"
-p 将容器的端口发布到。上面的"6379:6379",就是将我们的6639端口,映射到容器里的6379端口,第一个6379就是我们环境中的,第二个6379是docker容器中的
-d 在后台运行container并打印容器ID
执行到这里,容器也就成功安装好了。我们来看一下容器的状况。
输入命令查看:
docker ps -a
这样redis容器就创建成功,并且是在运行状态。
然后我们打开"RedisDesktopManager"连接一下试试:
上面这样也就可以了。
但是,好像,有点,不对?
人家nginx、mysql,都有配置文件的啊,同样也是数据库,mysql有数据存储,redis的呢?
那么咱们就继续往下走
进阶版:
输入下面的命令:
docker run --name redis-test -p 6379:6379 -v D:/docker/redis/redis.conf:/etc/redis/redis.conf -v D:/docker/redis/data:/data -d 镜像ID redis-server ../etc/redis/redis.conf --appendonly yes
命令中,各项参数解释:
run 在新容器中运行命令
--name 为容器分配一个名称。上面我们分配的名称就叫"redis-test"
-p 将容器的端口发布到。上面的"6379:6379",就是将我们的6379端口,映射到容器里的6379端口,第一个6379就是我们环境中的,第二个6379是docker容器中的
-v 绑定挂载卷。就拿其中第一个"D:/docker/redis/redis.conf:/etc/redis/redis.conf"说明,前者很容易看出,我的环境是Windows环境,所以是D盘,然后一直到 redis.conf 配置文件,中间有一个英文冒号":"就是映射到docker容器中的"redis.conf"配置文件,将两者进行绑定,这样我们在"D:/docker/redis/redis.conf"中修改配置,docker容器中的配置文件,也会相对应跟着修改。
-d 在后台运行container并打印容器ID
--appendonly 是redis默认持久化
redis-server 是启动服务程序,后面跟着的"../etc/redis/redis.conf"就是执行这个配置文件
最后看到这样的,就是成功了。
如果报错了,容器创建成功却并未成功运行,或者启动容器马上自动停止了,可以检查一下日志,报的错误内容是什么。
有一种,如果是直接运行上面命令,那估计是不行的,需要加一个文件,请同学先往下面看,再返回执行上面的 "docker run" 命令。
然后我们再次去打开"RedisDesktopManager"连接一下试试:
是成功的,但是同学们也发现了,图中我这里标记了,多了密码的。
为什么呢?返回上面我们创建容器的时候,挂载文件中,有"redis.conf"
我们来看看 redis.conf 文件的内容:
#bind 127.0.0.1
port 6379
requirepass 123456
protected-mode yes
databases 16
其中"requirepass" 就是设置的密码,我这里设置的是 123456
注意一点,第一行 bind 是注释掉了的。
为什么呢?
因为如果打开,并且后面跟的值是"127.0.0.1" 则代表只有本机可访问。
然后这个本机,又是docker容器本身,我们是在Windows环境下的,所以如果设置了 bind,那么就无法使用"RedisDesktopManager"工具访问了。
上面我们说过,mysql有数据,redis也是有数据的,根据我们的挂载目录,能看到我们Windows下的目录发生了变化:
这里就是redis的数据了
补充关键,这是一个大坑,建议未成年在大人陪同下观看:
我在windows环境下,就在 docker run 这一步,真的头疼我了,因为我们使用上面最简单的方式,是没问题的,但是使用"进阶版"时,就是运行容器,是要根据我的配置来的,所以就有了后面的一段"redis-server ../etc/redis/redis.conf"
就这一段,我纠结了将近俩小时。
程序一直给我提示错误,文件找不到,路径错误。
因为起初我使用的是 "redis-server /etc/redis/redis.conf", 当然也不光这一段,就在这一段上改来改去。
看看上面,发现这二者的区别没, 没错,就两个字符,"/etc"前面的两个点。因为它执行的文件目录原因吧,就一直找不到,当时的错误我没截图下来,有兴趣的同学可以自己尝试一下。我是四处百度钻研,都没找到答案,估计这太奇葩了,最后我就尝试了一下,这文件目录问题,我尝试改一下相对路径,就对了???