【百炼成魔】docker部署redis单节点
环境准备
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
安装常用软件
yum install -y wget net-tools bash-completion yum-utils device-mapper-persistent-data lvm2
添加软件源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
yum -y install docker-ce
启动docker并配置开机自启
systemctl start docker && systemctl enable docker
拉取redis镜像
docker pull redis
docker images
创建redis持久化挂载卷
docker volume create -d local redis-data
docker volume create -d local redis-conf
编写redis配置文件
vim redis.conf
protected-mode no
port 6379
tcp-backlog 511
requirepass 123456
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
protected-mode no
port 6379
tcp-backlog 511
requirepass 123456
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
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-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
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-max-len 128
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
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
参数解释
protected-mode: 这是一个布尔值 (yes/no),用于指定是否启用 Redis 的保护模式。在配置为 "no" 时,Redis 不会限制对外部网络的访问。默认值是 "yes"。
port: 这是 Redis 服务器监听的端口号。
tcp-backlog: 这是允许在给定时间内等待连接队列的最大长度。
requirepass: 这是访问 Redis 服务器时需要提供的密码。
timeout: 这是客户端连接的超时时间。
tcp-keepalive: 这是用于保持 TCP 连接处于活跃状态的时间间隔。
daemonize: 这是一个布尔值,用于指定是否将 Redis 服务器转换为守护进程。
supervised: 这是一个布尔值,用于指定是否以监督模式运行 Redis 服务器。
pidfile: 这是 Redis 服务器进程的 PID 文件的路径。
loglevel: 这是指定日志输出级别的配置参数。
logfile: 这是 Redis 日志文件的路径。如果设置为空字符串,日志将输出到标准输出 (stdout)。
databases: 这是 Redis 支持的数据库数量。
always-show-logo: 这是一个布尔值,用于指定是否始终显示 Redis 的标志图案。
save: 这是设置自动快照 (snapshot) 的条件。后面的数字对应于数据库修改的数量和时间间隔。
stop-writes-on-bgsave-error: 这是一个布尔值,用于指定在后台快照过程中发生错误时是否停止写入操作。
rdbcompression: 这是一个布尔值,用于指定是否启用 RDB 文件的压缩。
rdbchecksum: 这是一个布尔值,用于指定是否在 RDB 文件中包含校验和。
dbfilename: 这是持久化数据库的文件名。
dir: 这是持久化文件和日志文件的存储目录。
replica-serve-stale-data: 这是一个布尔值,用于指定当没有可用的主服务器时,从服务器是否继续向客户端提供数据。
replica-read-only: 这是一个布尔值,用于指定从服务器是否为只读模式。
appendonly: 这是一个布尔值,用于指定是否启用 AOF (Append-only File) 持久化。
appendfilename: 这是 AOF 文件的名称。
no-appendfsync-on-rewrite: 这是一个布尔值,用于指定在 AOF 重写过程中是否禁止执行 fsync 操作。
auto-aof-rewrite-percentage: 这是当 AOF 文件大小超过上一次重写大小的百分比时触发自动 AOF 重写的阈值。
auto-aof-rewrite-min-size: 这是触发自动 AOF 重写所需的最小 AOF 文件大小。
aof-load-truncated: 这是一个布尔值,用于指定在 AOF 文件被截断时是否加载截断的部分。
aof-use-rdb-preamble: 这是一个布尔值,用于指定在 AOF 文件中是否使用 RDB 标头。
lua-time-limit: 这是 Lua 脚本的执行时间限制。
slowlog-max-len: 这是 Redis 慢日志中记录的最大条目数。
notify-keyspace-events: 这是一个字符串参数,用于指定需要发送通知的键空间事件。
拷贝配置文件到挂载卷
查看docker家目录
docker info --format '{{ .DockerRootDir }}'
cp redis.conf /var/lib/docker/volumes/redis-conf/_data/
启动redis容器
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v redis-conf:/etc/redis/ -v redis-data:/data -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes --requirepass '123456'
参数解释
--restart=always: 这个参数告诉 Docker 在容器退出时总是重启容器。这样可以确保 Redis 容器始终在运行状态。
--log-opt max-size=100m: 这个参数设置日志的最大大小为100MB。一旦达到这个大小,Docker 将开始滚动并创建新的日志文件。
--log-opt max-file=2: 这个参数设置保留的日志文件的最大数量为2。当达到这个数量后,Docker 将删除最旧的日志文件。
-p 6379:6379: 这个参数将主机的端口 6379 映射到 Redis 容器的端口 6379。这允许通过主机的 IP 地址和端口访问 Redis 服务。
--name redis: 这个参数设置容器的名称为 "redis"。使用容器名称可以方便地对容器进行管理和操作。
-v redis-conf:/etc/redis/: 这个参数将名为 "redis-conf" 的卷挂载到容器中 Redis 配置文件存放的目录 /etc/redis/。这使得 Redis 容器可以使用卷中的配置文件。
-v redis-data:/data: 这个参数将名为 "redis-data" 的卷挂载到容器中 Redis 数据存储的目录 /data。这使得 Redis 容器可以将数据持久化到卷中。
-d: 这个参数告诉 Docker 在后台运行容器(以守护进程模式)。
redis:latest: 这个参数指定要使用的 Redis 镜像的名称和标签。在这种情况下,使用最新版本的 Redis 镜像。
redis-server /etc/redis/redis.conf: 这个参数指定要运行的 Redis 服务器程序以及要使用的配置文件路径。在这种情况下,Redis 服务器将使用 /etc/redis/redis.conf 中的配置。
--appendonly yes: 这个参数打开 Redis 的 AOF(Append-Only File)模式,即将写入的命令追加到磁盘上的日志文件中,以提供持久化存储。
--requirepass '123456': 这个参数设置 Redis 的身份验证密码为 "123456"。这将要求客户端在连接到 Redis 时提供正确的密码。
查看容器启动情况
docker ps
查看redis状态 设置键值测试持久化状态
docker exec -it redis bash
redis-cli
auth 123456
ping
set abc 123
get abc
退出容器 键盘按
ctrl +pq
重启容器验证持久化数据
docker restart redis
docker exec -it redis bash
redis-cli
auth 123456
get abc
可以看到我们设置的键还在 证明持久化成功