欢迎您, 来到 宁时修博客.^_^

Docker上启用 Redis 5.0.3 单机版

2019/09/12 言则行 Docker,Redis 277
在Docker上启用Redis 5.0.3

一、安装Docker

    请看 https://www.mgchen.com/30.html


二、拉取redis镜像

# 不加 tag 则默认是最新版本 latest
$ docker pull redis:5.0.3


    查看镜像:

$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
redis                    5.0.3               0f88f9be5839        6 months ago        95MB
twang2218/gitlab-ce-zh   11.1.4              1935cc9f8798        13 months ago       1.61GB


三、创建挂载目录与配置redis.conf

    创建 redis 容器的数据、配置文件目录:

$ mkdir /data/docker-redis-5.0.3/{conf,data} -p


    获取redis.conf 配置文件模板:

$ cd /data/docker-redis-5.0.3/conf/
$ wget https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf


    编辑 redis.conf

bind 0.0.0.0
daemonize no
protected-mode no
tcp-backlog 1024
logfile "/data/redis.log"

    bind 0.0.0.0 : redis-server 本身允许接受请求的IP (不是指请求来源的IP)。此处配置bind 0.0.0.0或者网络接口eth0 的IP (一般是172.17.0.x) 都行。详情阅读关于bind:https://blog.csdn.net/hel12he/article/details/46911159

    daemonize no:设置在前台运行。如果指定为yes,redis会以守护进程方式在后台运行。在docker中运行则会自动退出,因为docker要求容器的运行至少有一个前台进程。这与docker run -d不同,daemonize是指定进程在容器中是否在后台运行,-d是指容器是否在后台运行。

    logfile "/data/redis.log" :指定redis日志名称和路径。为什么要把日志文件放到 /data目录下,因为这是redis镜像在构建中指定的工作目录,详情请看:https://github.com/docker-library/redis/blob/master/5.0/Dockerfile


四、运行redis 5.0.3 镜像

    执行如下命令,启动一个redis容器:

$ docker run -d --name redis-server-6489 -p 6489:6379 --restart always -v /data/docker-redis-5.0.3/conf/redis.conf:/etc/redis/redis.conf -v /data/docker-redis-5.0.3/data:/data --privileged --sysctl net.core.somaxconn=1024  redis:5.0.3 redis-server /etc/redis/redis.conf

    

    说明:

-d: 后台运行
--name redis-server-6489: 容器名称
-p 6489:6379: 将容器端口 6379 映射到外部端口 6489
--restart always: 自动重启
-v /data/docker-redis-5.0.3/conf/redis.conf:/etc/redis/redis.conf: 挂载目录
-v /data/docker-redis-5.0.3/data:/data: 挂载目录
redis:5.0.3: 使用的镜像
redis-server /etc/redis/redis.conf: 这个是关键配置,让redis按照这个redis.conf配置文件内的配置启动

    --privileged 和 --sysctl net.core.somaxconn=1024  这两个参数是为了解决 redis启动报的WARNING:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled

    详情请看:https://www.jianshu.com/p/1aa78f34fe48

    

    查看容器启动状态:

$ docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                PORTS                                                             NAMES
94276c027272        redis:5.0.3                     "docker-entrypoint.s…"   33 minutes ago      Up 33 minutes         0.0.0.0:6489->6379/tcp                                            redis-server-6489
69310fd1bf0c        twang2218/gitlab-ce-zh:11.1.4   "/assets/wrapper"        2 days ago          Up 2 days (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:20222->22/tcp   gitlab


    如此,redis容器启动成功了。

    如果想看日志,不能使用 docker logs redis-server-6489这样的命令查看,因为在配置文件和启动命令中,将日志文件挂载到/data/docker-redis-5.0.3/data 下了,可以这样看:

$ tail -f /data/docker-redis-5.0.3/data/redis.log


五、访问redis容器

    要是宿主机上没有 redis客户端,可以这样访问测试:

$ docker exec -it redis-server-6489 /bin/bash
root@94276c027272:/data# redis-cli
127.0.0.1:6379>
127.0.0.1:6379> exit
root@94276c027272:/data# exit
exit


    也可以这样:

$ docker exec -it redis-server-6489 redis-cli -h redis-server-6489
redis-server-6489:6379> 
redis-server-6489:6379> exit

    

    -h : 指定redis 地址,可以是容器名、容器ID、容器虚拟IP。


    查看容器虚拟IP:

# 查看容器详情
$ docker inspect 94276c027272

# 过滤出容器IP
$ docker inspect 94276c027272 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.19.0.3",


点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群