Docker 部署 redis教程,附带部分小建议,防止踩坑
Docker 部署 redis,附带部分小建议,防止踩坑
跟所有人一样,我们先从docker基本命令开始
一、拉取redis镜像(配图来自菜鸟,其实截图没多大意义,对比看下)
# 默认就拉取lastest版本,如有特殊需求请加版本号 docker pull redis # docker pull redis:3.2
二、确认一下是否拉取成功
docker images
成功了就可以看到这一行,那一串长字符串就是imageId
三、运行redis之前,docker run配置解释
好了,前两步都是基操,没什么可说的,到了运行redis这步,有很多人就开始犯迷糊,到底怎么样来运行一个可供使用的redis呢?如果只想快速开始一个:没有密码、默认端口6379,本地可连接的redis实例,你可以直接看第五步,但我强烈建议你不要这么干,除非你的redis就是在本地玩玩,不丢在线上服务器上。
我们先看我自己使用的的完整版启动脚本,再来告诉你,配置里的启动项都是干嘛的
docker run -d -p 6379:6379 -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
-
docker run
启动
-
-d
将docker容器以后台启动的方式启动(除非你想看看容器启动起来马上看到里面的样子),启动后返回容器的ID
-
-p 6379:6379
将容器内部的端口6379映射到宿主机的6379端口
-
-v /data/docker/redis/conf/redis.conf :/etc/redis/redis.conf
-v 或者 --volume ,将宿主机卷绑定挂载到容器中,简单点说就是和端口一样,把宿主机的文件映射到容器中,前提是这个文件存在,否则只是一个空卷
-
redis
启动的redis镜像名称,如果不加tag,就是默认的lastest,如果有多个版本,请指定,比如 redis:3.2
上文启动命令并未指定此容器的名字,docker在启动后会随机分配一个容器名,如果需要自定义,则在命令里加上 ** --name redis-test ** ,redis-test 是我起的一个名字
-
redis-server /etc/redis/redis.conf
容器运行命令的最后,就是执行容器内部的命令了,启动过redis的同学都知道,这个命令的意思就是以 /etc/redis/redis.conf 为配置项启动redis了
四、运行redis
经过上文的参数解释,你应该知道了,redis运行最主要的问题就是要把这个配置文件给挂载出来,那么我们在运行之前,就要提前 在 /data/redis/conf 目录下(这只是我的目录,你可以任意目录,记得替换掉启动参数里的路径)新建一个 redis.conf , 这里同样给出一份配置(配置可以去参考redis的详细配置)
# 这里要设置成no,因为我们容器本身就已经是-d启动了,如果设置成yes,会无法启动起redis daemonize no # 这样设置可以让外界连接到redis,如果不想对公网暴露,可以设置成bind 127.0.0.1 ,但也有坑,坑见下文 bind 0.0.0.0 # 写入文件,不开启,一重启数据就没了 appendonly yes # 运行5个连接存活,防止出现长时间不连,需要重连的情况 tcp-keepalive 5 # 原则上必须填写,你要是对公网开放还没有密码,那就是裸奔 requirepass 你的密码
运行后,此redis实例可以使用了,测试是否成功,执行以下命令,直接连接名称为redis-test的容器并执行 redis-cli命令
docker exec -it redis-test redis-cli
成功,则看到连接到redis
127.0.0.1:6379>
输入 auth 你的密码 获取权限, OK则没有问题
127.0.0.1:6379>auth 你的密码 OK
同样的,可以测试从本地连接了。
五、启动一个最简单的redis实例,无密码
$ docker run -itd --name redis-test -p 6379:6379 redis
六、不踩坑姿势
-
如果要对外网关闭,只对内网开放,你以为的:bind 127.0.0.1 就可以?
-
常见错误:容器内设置bind 127.0.0.1 仅仅是对容器绑定,那会造成宿主机无法访问
-
解决思路:
打通宿主机和容器的网络,可在启动的时候使用--net=host,直接让容器使用宿主机的IP和host - 在iptables层(或者阿里云的安全组类似的)进行端口的控制,决定暴露给谁使
- 密码强度增加,端口更换成其他的,也可以解决不少安全性,这样开放就开放减低了被扫描的可能性
容器是不识别宿主机的local IP的,所以你想绑定bind 192.X.X.X 也同样不可行
数据没有保存出来,想直接抓aof数据
-
挂载出来即可,和conf同理
- Windos Docker Redis cluster 集群部署(linux一样)
- 在Docker上部署Python的Flask框架的教程
- 史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目
- linux环境部署及docker安装redis的方法
- CentOS8上用Docker部署开源项目Tcloud的教程
- Docker 部署 Redis 集群
- docker中部署redis
- 分别用docker和物理机器部署redis+sentinel
- 容器部署解决方案---Docker使用教程
- docker-compose部署django+nginx+uwsgi+celery+redis+mysql
- 史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目
- Docker学习总结(51)——为什么不建议把数据库部署在 Docker 容器内的7大原因?
- Docker部署redis集群以及运行项目
- 使用Docker Compose部署基于Sentinel的高可用Redis集群
- 使用Docker部署Redis自动故障转移
- DOCKER简明教程 : 通过容器连接REDIS数据库
- redis 集群部署教程
- Docker快速部署Redis
- docker部署redis集群
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo