win10中使用docker安装redis5.0并解除警告

一、前提

请升级到最新版的docker,因为需要用到docker的sysctl命令,老版本的docker无此命令。
本文中使用的docker版本是:Docker version 20.10.13, build a224086


二、拉取镜像

powershell窗口中执行:

docker pull redis:5.0

执行结果示例:
在这里插入图片描述


三、准备redis.conf配置文件

在硬盘中准备redis.conf配置文件,路径示例:E:\software\redis\docker-redis-config\redis.conf
文件内容如下(请修改第24行的密码1234567890为你自己的密码):

bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass 1234567890
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

四、新增数据文件夹

在硬盘上新建数据库文件夹E:\software\redis\docker-redis-data,后续会用到


五、在docker中启动redis

启动命令(同样在powershell中执行):

docker stop redis ; docker rm redis; docker run --privileged=true --sysctl net.core.somaxconn=4096 -p 6379:6379 --name redis -v /e/software/redis/docker-redis-config/redis.conf:/etc/redis/redis.conf -v /e/software/redis/docker-redis-data:/data -d redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes; docker logs redis;

命令解释:
docker stop redis:如果已经存在redis容器,则先停止
docker rm redis:如果已经存在redis容器,则先删除
docker run:运行redis容器
  --privileged=true:以特权模式启动,方便后续修改只读文件
  --sysctl net.core.somaxconn=4096:修改端口最大监听队列的长度为4096(默认为128,太低了,会报警告)
  -p 6379:6379:指定宿主机器和容器内的端口都是6379,:前面的为宿主机器的端口,:后面的为容器内的端口
  --name redis:容器的名称叫redis
  -v /e/software/redis/docker-redis-config/redis.conf:/etc/redis/redis.conf:把本地硬盘中的E:/software/redis/docker-redis-config/redis.conf文件挂载为容器中的/etc/redis/redis.conf文件(这里的/e指的就是Windows上的E盘)
  -v /e/software/redis/docker-redis-data:/data:道理同上,略。
  -d:在后台运行容器
  redis:5.0:运行的镜像名称
  redis-server:运行镜像中的redis-server命令
  /etc/redis/redis.conf:redis-server命令使用的配置文件为/etc/redis/redis.conf
  --appendonly yes:redis-server命令的参数,表示开启redis的持久化
docker logs redis:显示docker启动redis时的日志


六、解除警告

如果启动后有类似如下警告:

1:M 28 Mar 2022 09:04:01.744 # 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.
1:M 28 Mar 2022 09:04:01.744 # 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.

则先在powershell中执行以下命令:

docker exec -it redis /bin/bash

命令用途:进入redis容器中,并使用/bin/bash作为shell
然后在容器内部执行以下命令:

echo 1 > /proc/sys/vm/overcommit_memory
echo never > /sys/kernel/mm/transparent_hugepagee/enabled

参考图:
在这里插入图片描述
退出后,重新执行第五步的命令,应该就没有警告了。


全文完

猜你喜欢

转载自blog.csdn.net/h837087787/article/details/123799213