一、安装redis
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1 docker.io/redis:7.4.1
二、配置redis
wget -O /data/redis/redis.conf https://github.com/redis/redis/blob/7.4.1/redis.conf
vim redis.conf
修改:
bind 127.0.0.1 -> bind 0.0.0.0 # 个人学习用,随便修改
daemonize no # 由于是docker启动,这里不需要设置为yes
logfile "" -> logfile "redis.log"
databases 16 -> databases 1 # 个人学习用,不需要那么多数据库
三、启动redis
vim /data/redis/start && chmod 755 /data/redis/start
#!/bin/bash
docker run \
-d \
--name redis \
-p 6379:6379 \
--restart always \
-v /data/redis:/data \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
redis:7.4.1 \
/etc/redis/redis.conf # 注意,这里不需要redis-server命令
之所以不需要redis-server命令,是因为docker镜像有一个入口脚本 /usr/local/bin/docker-entrypoint.sh,该脚本的内容如下
#!/bin/sh
set -e
# first arg is `-f` or `--some-option`
# or first arg is `something.conf`
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
set -- redis-server "$@"
fi
# allow the container to be started with `--user`
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
find . \! -user redis -exec chown redis '{}' +
exec gosu redis "$0" "$@"
fi
# set an appropriate umask (if one isn't set already)
# - https://github.com/docker-library/redis/issues/305
# - https://github.com/redis/redis/blob/bb875603fb7ff3f9d19aad906bd45d7db98d9a39/utils/systemd-redis_server.service#L37
um="$(umask)"
if [ "$um" = '0022' ]; then
umask 0077
fi
exec "$@"
根据内容可知,该脚本会接收来自docker run后面的启动参数,准确说是配置文件,然后执行redis-server xxx.conf
四、验证
lsof -i:6379
> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
> docker-pr 218210 root 4u IPv6 798476 0t0 TCP *:redis (LISTEN)
docker ps
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
> b488fddd7e26 redis:7.4.1 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 0.0.0.0:6379->6379/tcp redis