一、Redis7.4部署安装
1、 拉取 Redis 镜像
# 拉取最新版本
docker pull redis:7.4
# 或拉取特定版本
docker pull redis:6.2.6
2、 创建挂载目录并配置 Redis
创建宿主机目录conf,data,run
mkdir -p /opt/docker/redis/{conf,data,run}
echo /opt/docker/redis/{conf,data,run}|xargs chmod 755
下载并修改 Redis 配置文件:
# 下载官方配置文件(根据版本调整 URL)
wget https://raw.githubusercontent.com/redis/redis/7.4/redis.conf -O /opt/docker/redis/conf/redis.conf
# 编辑配置文件
vim /opt/docker/redis/conf/redis.conf
关键配置修改:
bind 0.0.0.0 # 允许远程访问
protected-mode no # 关闭保护模式
port 6379 # 默认端口
daemonize no # Docker 中禁用守护进程模式
requirepass yourpassword # 设置访问密码(可选)
appendonly yes/no # 启用 AOF 持久化
dir /opt/docker/redis/data/ # 数据存储目录(容器内路径)
pidfile /tmp/redis-6379.pid #设置pid文件路径
- 参数说明:
appendonly yes
启用AOF持久化后,/opt/docker/redis/data/
目录下的appendonlydir
需要授权,目录下所有文件需支持读写chmod -R redis:redis /opt/docker/redis/data/appendonlydir #授权redis用户(可选) chmod 755 /opt/docker/redis/data/appendonlydir chmod 777 /opt/docker/redis/data/appendonlydir/*
[root@localhost data]# ll appendonlydir/ 总用量 8 -rwxrwxrwx 1 systemd-coredump input 88 5月 15 23:09 appendonly.aof.1.base.rdb -rwxrwxrwx 1 systemd-coredump input 0 5月 15 23:09 appendonly.aof.1.incr.aof -rwxrwxrwx 1 systemd-coredump input 88 5月 15 23:09 appendonly.aof.manifest [root@localhost data]#
3. 启动 Redis 容器
使用 docker run
命令:
docker run -d \
--name redis_7.5 \
--restart=always \
--network host \
-v /opt/docker/redis/conf/redis.conf:/opt/docker/redis/conf/redis.conf \
-v /opt/docker/redis/data:/opt/docker/redis/data \
redis:7.4 \
redis-server /opt/docker/redis/conf/redis.conf
参数说明:
参数 | 作用 |
---|---|
-d | 后台运行容器 |
--name redis_7.5 | 容器名称 |
--restart=always | 开机自动重启容器 |
-p 6379:6379 | 映射宿主机与容器端口 |
-v ... | 挂载配置文件和数据目录 |
redis-server ... | 指定配置文件启动 Redis |
-v参数分解说明:
-v ~/docker/nginx/html:/usr/share/nginx/html:ro
-
-v
:Docker 命令中用于挂载卷的标志(Volume Flag)。 -
~/docker/nginx/html
:宿主机的文件路径(源路径)。 -
~
代表用户主目录(如 /home/user 或 C:\Users\user)。 -
/usr/share/nginx/htm
l:容器内的文件路径(目标路径)。
Nginx 默认将此路径作为 Web 服务器的根目录(即访问 http://localhost 时返回的内容)。 -
:ro
:可选参数,表示只读模式(Read-Only)。容器只能读取该目录,无法修改,确保宿主机文件安全。
4. 验证安装
检查容器状态:
[root@eulerzy data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eff5289195f6 redis:7.4 "docker-entrypoint.s…" 6 seconds ago Up 6 seconds redis_7.5
STATUS
参数说明:
参数 | 实例 | 作用 |
---|---|---|
Up | Up 2 minutes | 容器正在运行中。时间表示容器已持续运行的时长。 |
Exited | Exited (0) 5 minutes ago | 容器已正常停止(退出码为 0)或异常停止(退出码非 0,如 1、137 等);退出码 0:通常表示容器内的主进程正常结束。其他退出码:表示异常退出,例如进程崩溃、被信号终止(如 137 表示被 SIGKILL 终止)。 |
Created | Created 10 seconds ago | 容器已创建但尚未启动(例如,使用 docker create 创建后未执行 docker start,需要启动) |
Restarting | Restarting (1) 2 seconds ago | 容器正在重启中。通常与 restart policy(如 --restart=always )相关,表示容器因故障退出后正在自动重启。 |
Paused | Up 1 hour (Paused) | 容器已被暂停。使用 docker pause 命令可以暂停容器内的所有进程,暂停后容器仍存在但不运行。 |
Dead | - | 容器处于异常状态,无法正常启动或停止,可能需要手动清理:docker rm -f ,清理全部:docker container prune |
进入容器测试连接:
docker exec -it redis redis-cli
127.0.0.1:6379> auth abc123456 #配置文件设置的密码
OK
127.0.0.1:6379> ping
PONG
5.使用Dockerfile 构建镜像部署
- 在redis.conf文件目录创建Dockerfile文件
touch /opt/docker/redis/conf/Dockerfile chmod 777 /opt/docker/redis/conf/Dockerfile
# 使用官方 Redis 镜像作为基础镜像 FROM redis:7.4 # 如果有自定义的 Redis 配置文件,可以将其复制到容器中 COPY ./redis.conf /opt/docker/redis/conf/redis.conf # VOLUME ["/opt/docker/redis/data","/opt/docker/redis/run"] CMD ["redis-server", "/opt/docker/redis/conf/redis.conf"] # 暴露 Redis 默认端口 EXPOSE 6379
- 在Dockerfile文件目录下构建名为my-redis镜像
[root@eulerzy conf]# docker build -t my-redis . [+] Building 0.3s (7/7) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 439B => [internal] load metadata for docker.io/library/redis:7.4 => [internal] load .dockerignore => => transferring context: 2B => [internal] load build context => => transferring context: 109.10kB => CACHED [1/2] FROM docker.io/library/redis:7.4 => [2/2] COPY ./redis.conf /opt/docker/redis/conf/redis.conf => exporting to image => => exporting layers => => writing image sha256:744dab7fd097e0d9d3d6ded3a105fa97f494780f4d9c => => naming to docker.io/library/my-redis [root@eulerzy conf]#
- 启动容器
[root@eulerzy ~]# docker run -d \ --name redis_7.4 \ --restart always \ --network bridge \ -p 6379:6379 \ my-redis
- 查看容器和测试验证
[root@eulerzy conf]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 763025d50956 my-redis "docker-entrypoint.s…" 11 seconds ago Up 10 seconds 0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp redis_7.4 [root@eulerzy conf]# [root@eulerzy conf]# docker logs redis_7.4 1:C 15 May 2025 03:21:10.789 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 15 May 2025 03:21:10.789 * Redis version=7.4.3, bits=64, commit=00000000, modified=0, pid=1, just started 1:C 15 May 2025 03:21:10.789 * Configuration loaded 1:M 15 May 2025 03:21:10.789 * monotonic clock: POSIX clock_gettime 1:M 15 May 2025 03:21:10.790 * Running mode=standalone, port=6379. 1:M 15 May 2025 03:21:10.791 * Server initialized 1:M 15 May 2025 03:21:10.791 * Reading RDB base file on AOF loading... 1:M 15 May 2025 03:21:10.791 * Loading RDB produced by version 7.4.3 1:M 15 May 2025 03:21:10.791 * RDB age 165945 seconds 1:M 15 May 2025 03:21:10.791 * RDB memory usage when created 0.90 Mb 1:M 15 May 2025 03:21:10.791 * RDB is base AOF 1:M 15 May 2025 03:21:10.791 * Done loading RDB, keys loaded: 0, keys expired: 0. 1:M 15 May 2025 03:21:10.791 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds 1:M 15 May 2025 03:21:10.791 * DB loaded from append only file: 0.000 seconds 1:M 15 May 2025 03:21:10.791 * Opening AOF incr file appendonly.aof.1.incr.aof on server start 1:M 15 May 2025 03:21:10.791 * Ready to accept connections tcp [root@eulerzy conf]# [root@eulerzy conf]# docker exec -it redis_7.4 redis-cli -a abc123456 ping Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. PONG [root@eulerzy conf]#
6. 使用 Docker Compose 部署(推荐,先完成上述1-2步骤)
(1) 下载Docker Compose(二进制文件)
# 下载指定版本的 docker-compose(替换为你需要的版本)-o :保存下载文件到指定目录
sudo curl -L "https://github.com/docker/compose/releases/download/v2.35.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/redis7-4-dockercompose/docker-compose
(2) 赋予可执行授权docker-compose文件
sudo chmod +x /usr/local/bin/redis7-4-dockercompose/docker-compose
(3) 创建符号链接
该命令的作用是在/usr/bin/
目录下创建一个指向/usr/local/bin/docker-compose
的符号链接,使得系统能够在任何位置通过docker-compose
命令调用该程序:
sudo ln -s /usr/local/bin/redis7-4-dockercompose/docker-compose /usr/bin/docker-compose
工作原理:
- 符号链接类似于 Windows 系统中的快捷方式,它指向原始文件或目录。
- 当系统执行docker-compose命令时,会自动解析链接并执行实际程序。
- 修改或删除符号链接不会影响原始文件,但删除原始文件会导致链接失效。
/usr/local/bin
是系统默认的用户安装软件目录,但某些环境可能未将其包含在 PATH 变量中/usr/bin
是系统默认的可执行文件目录,所有用户都能直接访问- 通过创建符号链接,可以确保docker-compose命令在任何目录下都能被调用
检查是否安装成功
docker-compose -v
(4)配置docker-compose.yml
文件
- 创建
docker-compose.yml
文件,并赋予读写授权、写入配置:touch /usr/local/bin/redis7-4-dockercompose/docker-compose.yml chmod 777 /usr/local/bin/redis7-4-dockercompose/docker-compose.yml ln -s /usr/local/bin/redis7-4-dockercompose/docker-compose.yml /usr/bin/docker-compose.yml
- 写入配置–docker compose 配置文件指令详解:1、2
#version: '3.8' #后续版本不需要说明版本号,会自动识别 services: redis: image: redis:7.4 container_name: redis_7.4 restart: always network_mode: host ports: - "6379:6379" volumes: - /opt/docker/redis/conf/redis.conf:/opt/docker/redis/conf/redis.conf:ro - /opt/docker/redis/data/:/opt/docker/redis/data/ # pid绑定关联容器可写路径/tmp - /opt/docker/redis/run:/tmp environment: # 通过环境变量设置密码(优先级高于配置文件) - REDIS_PASSWORD=abc123456 command: ["redis-server", "/opt/docker/redis/conf/redis.conf"]
(5)配置文件/etc/sysctl.conf
- 更改redis在系统内存提交策略,防止Redis 在高负载的情况下可能会崩溃。
vm.overcommit_memory = 1
- 策略立即生效
sudo sysctl -p
(6)配置全局模式使用docker-compose
-
在
/usr/local/bin/redis7-4-dockercompose/
目录下启动容器:docker-compose up -d #或者:docker-compose ps -a
-
vi ~/.bashrc
在该配置文件末尾添加docker-compose
文件和docker-compose.yml
文件路径:export COMPOSE_PROJECT_NAME=redis7-4-dockercompose export COMPOSE_CONFIG=/usr/local/bin/redis7-4-dockercompose/docker-compose.yml export COMPOSE_FILE=/usr/local/bin/redis7-4-dockercompose/docker-compose export COMPOSE_LOG_LEVEL=DEBUG
-
重新加载
~/.bashrc
文件配置source ~/.bashrc
常用命令 作用 awk '{print NR,$0}' ~/.bashrc
显示行号 gawk -i inplace 'NR>=14 && NR<=17 {sub(/^#/, "")}1' ~/.bashrc
取消14-17行的 # 号 gawk -i inplace 'NR>=14 && NR<=17 {sub(/^/, "#")}1' ~/.bashrc
增加14-17行的 # 号 -
查看容器启动状况:
[root@eulerzy ~]# docker-compose ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd6095b86e99 redis:7.4 "docker-entrypoint.s…" 3 hours ago Up 45 minutes redis_7.4
-
检验容器:
docker exec -it redis_7.4 redis-cli -a abc123456 ping
[root@eulerzy bin]# docker exec -it redis_7.4 redis-cli -a abc123456 ping Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. PONG [root@eulerzy bin]#
-
查看docker运行redis容器的日志:
docker-compose logs redis #或者:docker logs redis
redis_7.4 | 1:signal-handler (1747123034) Received SIGTERM scheduling shutdown... redis_7.4 | 1:M 13 May 2025 07:57:14.012 * User requested shutdown... redis_7.4 | 1:M 13 May 2025 07:57:14.012 * Calling fsync() on the AOF file. redis_7.4 | 1:M 13 May 2025 07:57:14.013 * Saving the final RDB snapshot before exiting. redis_7.4 | 1:M 13 May 2025 07:57:14.020 * DB saved on disk redis_7.4 | 1:M 13 May 2025 07:57:14.021 * Removing the pid file. redis_7.4 | 1:M 13 May 2025 07:57:14.021 # Redis is now ready to exit, bye bye... redis_7.4 | 1:C 13 May 2025 07:59:42.346 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo redis_7.4 | 1:C 13 May 2025 07:59:42.346 * Redis version=7.4.3, bits=64, commit=00000000, modified=0, pid=1, just started redis_7.4 | 1:C 13 May 2025 07:59:42.346 * Configuration loaded redis_7.4 | 1:M 13 May 2025 07:59:42.346 * monotonic clock: POSIX clock_gettime redis_7.4 | 1:M 13 May 2025 07:59:42.347 * Running mode=standalone, port=6379. redis_7.4 | 1:M 13 May 2025 07:59:42.347 * Server initialized redis_7.4 | 1:M 13 May 2025 07:59:42.348 * Reading RDB base file on AOF loading... redis_7.4 | 1:M 13 May 2025 07:59:42.348 * Loading RDB produced by version 7.4.3 redis_7.4 | 1:M 13 May 2025 07:59:42.348 * RDB age 9857 seconds redis_7.4 | 1:M 13 May 2025 07:59:42.348 * RDB memory usage when created 0.90 Mb redis_7.4 | 1:M 13 May 2025 07:59:42.348 * RDB is base AOF redis_7.4 | 1:M 13 May 2025 07:59:42.348 * Done loading RDB, keys loaded: 0, keys expired: 0. redis_7.4 | 1:M 13 May 2025 07:59:42.348 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds redis_7.4 | 1:M 13 May 2025 07:59:42.348 * DB loaded from append only file: 0.000 seconds redis_7.4 | 1:M 13 May 2025 07:59:42.348 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
7.容器应用-卸载清理
(1)选择要卸载的容器
[root@eulerzy bin]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd6095b86e99 redis:7.4 "docker-entrypoint.s…" 20 hours ago Exited (0) 3 minutes ago redis_7.4
[root@eulerzy bin]#
(2)卸载指定容器,并检查
[root@eulerzy bin]# docker rm redis_7.4
redis_7.4
[root@eulerzy bin]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@eulerzy bin]#
(3)清理容器缓存
[root@eulerzy bin]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@eulerzy bin]#
(4)清除指定docker拉取的镜像
docker rmi [-f] [images_name/images_id] #-f:表示强制删除
- 删除所有 Redis 镜像(批量操作)
-q:只输出镜像 IDdocker images -q redis | xargs docker rmi -f
xargs:将前一个命令的输出作为参数传递给docker rmi
-f:强制删除
8. 常见问题与注意事项
(1) 无法远程访问 Redis
- 检查防火墙规则,开放 6379 端口。
- 确保
bind 0.0.0.0
和protected-mode no
已配置。
(2) 数据持久化失败
- 确认挂载目录权限:
chmod -R 777 /opt/docker/redis/data
- 检查
dir /data
和appendonly yes
是否启用。
(3) 版本差异问题
- Redis 7.x 默认配置路径可能为
/usr/local/etc/redis/redis.conf
,需通过docker exec
确认。
(4) 内存管理
- 在配置文件中设置最大内存策略(如
maxmemory 2gb
和maxmemory-policy allkeys-lru
)。
9. 安全建议
- 密码保护:始终设置
requirepass
。 - 网络隔离:在生产环境中使用 Docker 自定义网络,限制 Redis 暴露范围。
- TLS 加密:若需加密通信,启用
tls-port
并配置证书(适用于 Redis 6.x+)。
10. 总结
在当前的软件开发和部署实践中,Dockerfiles 和 Docker Compose 都被广泛使用,但它们通常用于不同的场景。
(1) Dockerfile
用途:
- Dockerfile 是一个文本文件,包含了一系列指令,用于定义如何构建一个 Docker 镜像。每个指令创建镜像的一个层。
- 它主要用于描述应用环境的初始化过程,包括安装依赖、设置环境变量、复制文件等操作。
优势与特点:
- 精确控制:可以精确地控制容器内的操作系统、软件包版本和其他配置。
- 可重复性:通过 Dockerfile 构建的镜像可以在任何支持 Docker 的环境中一致地运行。
- 自动化:集成到 CI/CD 流水线中,自动化构建和测试流程。
- 轻量级:仅包含必要的组件和服务,减少资源占用。
(2)Docker Compose
用途:
- Docker Compose 通常用于定义和运行多容器 Docker 应用程序。通过一个
docker-compose.yml
文件来配置应用程序的服务。 - 它允许您在一个命令中启动、停止和管理多个相互关联的容器。
优势与特点:
- 多服务管理:简化了多容器应用的管理和部署,比如数据库、缓存、前端和后端服务等。
- 快速原型设计:对于开发和测试来说非常方便,能够快速搭建起复杂的应用环境。
- 环境一致性:确保不同环境(如开发、测试、生产)之间的一致性。
- 简化网络配置:内置了简单的网络配置,使得服务间通信更加便捷。
区别与选择
- 单一 vs 复杂应用:如果只需要部署一个单独的服务或应用,Dockerfile 就足够了;如果的应用由多个服务组成(例如微服务架构),那么 Docker Compose 更加合适。
- 手动 vs 自动化部署:Dockerfile 更适合于需要高度定制化的场景,而 Docker Compose 更适合快速启动和关闭一组服务,尤其是在开发阶段。
- 学习曲线:Dockerfile 相对简单直接,易于学习;Docker Compose 则需要理解更多的概念,如服务依赖关系、网络配置等。
经常一起使用:首先使用 Dockerfile 来定义单个服务的镜像,然后使用 Docker Compose 来编排这些服务。