Docker 部署 Redis:从入门到实战的技术指南
mhr18 2025-07-28 18:19 15 浏览 0 评论
在当今快速迭代的互联网软件开发领域,高效的开发工具和环境搭建至关重要。Redis 作为一款广泛使用的高性能内存数据库,在众多项目中承担着缓存、消息队列等关键角色。而 Docker,这个容器化技术的佼佼者,为我们部署 Redis 带来了前所未有的便捷性和高效性。今天,就让我们一同深入探索如何利用 Docker 技术搭建 Redis 的开发服务,为你的项目开发注入强大动力。
为什么选择 Docker 部署 Redis?
(一)部署速度:传统安装 vs Docker 安装对比
在传统方式安装 Redis 时,开发人员往往需要花费大量时间。从安装依赖库、编译源代码,到配置各种参数,整个过程繁琐复杂,通常需要 15 分钟甚至更久才能完成。而使用 Docker,一切变得简单快捷。只需一条简短的命令,就能在短短 1 分钟内完成 Redis 容器的启动,极大地提高了开发效率。
(二)环境依赖:隔离冲突,轻松应对
传统安装 Redis,必须小心翼翼地处理系统环境依赖问题。不同的操作系统版本、依赖库的不同版本之间,稍有不慎就会引发冲突,导致安装失败或者运行不稳定。Docker 则巧妙地解决了这一难题,它为每个容器提供了完全隔离的运行环境,容器内的 Redis 服务与宿主机以及其他容器相互独立,不存在任何依赖冲突的风险。这意味着,无论你在何种复杂的系统环境下工作,都能确保 Redis 稳定运行。
(三)版本切换:随心所欲,秒级完成
开发过程中,我们常常需要根据项目需求切换 Redis 的版本。传统方式下,切换版本意味着重新编译安装,这不仅耗时费力,还可能因为编译环境的差异导致各种意想不到的问题。而 Docker 的镜像机制使得版本切换变得轻而易举,只需要更换一行命令中的镜像标签,就能在秒级时间内完成 Redis 版本的切换,让你轻松适应不同项目的版本要求。
(四)资源占用:精准掌控,合理分配
传统安装的 Redis 直接运行在宿主机上,对系统资源的占用缺乏有效的控制手段,容易导致资源浪费或者与其他服务争用资源。Docker 则允许我们对容器的资源使用进行精确限制,无论是 CPU、内存还是磁盘 I/O,都能根据项目的实际需求进行合理分配,确保系统资源得到充分且高效的利用。
(五)数据迁移:一键操作,安全无忧
当项目需要迁移 Redis 数据时,传统方式往往需要手动备份数据文件,再在新环境中进行恢复操作,这个过程不仅繁琐,还存在数据丢失的风险。Docker 通过数据卷(Volume)机制,能够将容器内的数据与宿主机或其他存储设备进行关联,实现数据的持久化存储。在迁移时,只需将数据卷一同迁移到新环境,就能快速完成数据的迁移,既方便又安全。
极速入门
(一)前置准备
在开始使用 Docker 部署 Redis 之前,我们需要确保系统中已经安装了合适版本的 Docker。通过运行docker --version命令,检查 Docker 的版本是否在 20.10.17 及以上。如果还没有安装 Docker,可以前往 Docker 官方网站,按照详细的安装指南进行安装。另外,虽然不是必需的,但安装docker - compose会为后续的部署和管理带来更多便利,同样可以通过docker - compose --version命令检查是否已安装。
为了增强 Redis 容器的网络隔离性,我们可以创建一个专用的网络。执行docker network create redis - net命令,这样就创建了一个名为redis - net的自定义网络,后续我们的 Redis 容器将运行在这个网络中,与其他容器相互隔离,提高安全性。
(二)运行 Redis 容器
准备工作完成后,接下来就可以启动 Redis 容器了。使用以下基础运行命令:
docker run -d \
--name redis - dev \
-p 6379:6379 \
--network redis - net \
redis:7.2.4 - alpine
在这条命令中,-d参数表示让容器在后台以 “分离” 模式运行;--name redis - dev为容器指定了一个易于识别的名称redis - dev,方便后续管理和操作;-p 6379:6379将容器内 Redis 服务默认使用的 6379 端口映射到宿主机的 6379 端口,这样我们就可以通过宿主机的 IP 地址和 6379 端口访问到容器内的 Redis 服务;--network redis - net指定容器运行在我们刚刚创建的redis - net网络中;redis:7.2.4 - alpine则指定了使用的 Redis 镜像版本为 7.2.4 的 Alpine 版本,Alpine 版本的镜像体积小巧,仅 35MB 左右,能够快速下载和部署,非常适合开发环境使用。
容器启动后,我们可以通过docker logs redis - dev | grep "Ready to accept"命令验证 Redis 容器是否正常运行。如果输出中包含 “Ready to accept” 相关信息,那就说明 Redis 容器已经成功启动并准备好接受连接了。
(三)快速测试
为了确保 Redis 容器能够正常工作,我们可以进入容器执行 CLI(命令行界面)进行简单的测试。运行docker exec -it redis - dev redis - cli命令,该命令会进入到刚刚启动的redis - dev容器内,并启动 Redis 的命令行客户端。在命令行中,我们可以执行一些基本的操作,例如:
127.0.0.1:6379> SET docker_demo "success"
127.0.0.1:6379> GET docker_demo
生产级配置详解
(一)数据持久化方案
在开发环境中,我们可能更注重快速搭建和测试,而在生产环境中,数据的持久化至关重要,它关系到业务数据的安全性和完整性。Redis 提供了两种主要的持久化方式:RDB(Redis Database Backup)和 AOF(Append - Only File),下面我们分别介绍如何通过 Docker 实现这两种持久化方案。
方案 1:挂载数据卷
使用数据卷挂载是一种简单且高效的持久化方式。首先,我们需要创建一个持久化卷,通过docker volume create redis - data命令,就创建了一个名为redis - data的数据卷。然后,使用以下命令启动 Redis 容器:
docker run -d \
--name redis - prod \
-v redis - data:/data \
redis:7.2.4 - alpine \
redis - server --save 60 1 --loglevel warning
在这条命令中,-v redis - data:/data将我们刚刚创建的redis - data数据卷挂载到容器内的/data目录,这个目录正是 Redis 默认存储数据的位置。redis - server --save 60 1 --loglevel warning表示启动 Redis 服务器,并设置持久化策略为每 60 秒内至少有 1 个键值对发生变化时,就进行一次 RDB 快照保存,同时将日志级别设置为warning,减少不必要的日志输出。
方案 2:绑定宿主机目录
除了使用数据卷,我们还可以将宿主机上的特定目录直接绑定到容器内,实现数据的持久化。首先,在宿主机上创建用于存储 Redis 数据和配置文件的目录,执行mkdir -p /docker/redis/{data,conf}命令,这样就在/docker/redis目录下创建了data和conf两个子目录,分别用于存储数据和配置文件。
接下来,我们需要获取 Redis 的默认配置文件,通过wget -O
/docker/redis/conf/redis.conf
https://raw.githubusercontent.com/redis/redis/7.2.4/redis.conf命令,将 Redis 7.2.4 版本的默认配置文件下载到/docker/redis/conf目录下。然后,根据实际需求修改配置文件,例如启用持久化、设置内存限制、添加密码等。这里以启用 AOF 持久化为例,在redis.conf文件中找到appendonly配置项,将其值改为yes。
最后,使用以下命令启动 Redis 容器:
docker run -d \
-v /docker/redis/data:/data \
-v /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
redis:7.2.4 - alpine \
redis-server /usr/local/etc/redis/redis.conf
这条命令将宿主机上的/docker/redis/data目录挂载到容器内的/data目录,用于存储数据;将
/docker/redis/conf/redis.conf文件挂载到容器内的
/usr/local/etc/redis/redis.conf,使得容器内的 Redis 服务使用我们自定义的配置文件启动。
(二)安全加固配置
在生产环境中,安全是不容忽视的重要环节。下面我们从密码认证和禁用高危命令两个方面来对 Redis 进行安全加固。
密码认证
为了防止未经授权的访问,我们可以为 Redis 设置密码。通过环境变量的方式设置密码非常简单,使用以下命令启动 Redis 容器:
docker run -d \
-e REDIS_PASSWORD=yourstrongpassword \
redis:7.2.4 - alpine \
--requirepass ${REDIS_PASSWORD}
在这条命令中,-e REDIS_PASSWORD=yourstrongpassword将环境变量REDIS_PASSWORD设置为yourstrongpassword,即我们要设置的 Redis 密码。--requirepass ${REDIS_PASSWORD}则告诉 Redis 服务器使用我们设置的密码进行认证。这样,在连接 Redis 时,就需要提供正确的密码才能进行操作。例如,使用docker exec -it redis - prod redis - cli -a yourstrongpassword命令,就可以带密码连接到redis - prod容器内的 Redis 服务。
禁用高危命令
在一些安全要求较高的场景下,我们可能需要禁用一些危险的 Redis 命令,以防止误操作或恶意攻击。例如,FLUSHALL命令会清空 Redis 数据库中的所有数据,一旦误执行,后果不堪设想。我们可以通过自定义配置文件来禁用这个命令。在前面创建的
/docker/redis/conf/redis.conf文件中,添加一行rename - command FLUSHALL '',这行命令的作用是将FLUSHALL命令重命名为空字符串,相当于禁用了该命令。修改完配置文件后,通过docker restart redis - prod命令重启 Redis 容器,使配置生效。
Docker Compose 全栈部署
(一)编写 docker - compose.yml
Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它通过一个 YAML 文件来配置应用程序的服务、网络和卷等。使用 Docker Compose 可以更方便地管理和部署复杂的应用架构,下面我们就来看看如何使用它部署 Redis。
在项目目录下创建一个名为docker - compose.yml的文件,并编写以下内容:
version: '3.8'
services:
redis:
image: redis:7.2.4 - alpine
container_name: redis - main
ports:
- "6379:6379"
volumes:
- redis_data:/data
-./redis.conf:/usr/local/etc/redis/redis.conf
networks:
- redis - net
command: redis - server /usr/local/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=yoursecurepass
deploy:
resources:
limits:
memory: 1g
cpus: "0.5"
volumes:
redis_data:
networks:
redis - net:
driver: bridge
在这个docker - compose.yml文件中:
version: '3.8'指定了 Docker Compose 文件的版本,确保兼容性。
services部分定义了我们的服务,这里只有一个 Redis 服务。
- image: redis:7.2.4 - alpine指定使用的 Redis 镜像为 7.2.4 的 Alpine 版本。
- container_name: redis - main为容器指定名称redis - main。
- ports部分将宿主机的 6379 端口映射到容器内的 6379 端口,方便外部访问 Redis 服务。
- volumes部分定义了数据卷挂载,redis_data:/data将名为redis_data的数据卷挂载到容器内的/data目录,用于持久化数据;./redis.conf:/usr/local/etc/redis/redis.conf将当前目录下的redis.conf文件挂载到容器内的/usr/local/etc/redis/redis.conf,使用自定义配置文件。
- networks部分指定容器运行在redis - net网络中。
- command: redis - server /usr/local/etc/redis/redis.conf表示启动 Redis 服务器,并使用自定义的配置文件。
- environment部分设置环境变量REDIS_PASSWORD=yoursecurepass,为 Redis 设置密码。
- deploy部分用于设置资源限制,这里限制了 Redis 容器最多使用 1GB 内存和 0.5 个 CPU 核心。
volumes部分定义了数据卷redis_data,它会在首次启动时自动创建。
networks部分定义了网络redis - net,使用bridge驱动,这是 Docker 默认的网络驱动,适用于大多数场景。
(二)启动与管理
编写好docker - compose.yml文件后,就可以使用 Docker Compose 来启动和管理 Redis 服务了。
启动 Redis 集群,在项目目录下执行docker - compose up - d命令,-d参数表示在后台运行容器。执行该命令后,Docker Compose 会根据docker - compose.yml文件的配置,自动拉取所需的 Redis 镜像(如果本地没有的话),并启动 Redis 容器。
查看 Redis 容器的实时日志,可以使用docker - compose logs - f redis命令,其中redis是服务名称,通过这个命令可以实时查看 Redis 容器的运行日志,方便排查问题。
如果需要对 Redis 服务进行横向扩展,例如增加 Redis 实例的数量,可以使用docker - compose scale redis = 3命令,这条命令会将 Redis 服务扩展到 3 个实例,每个实例都基于docker - compose.yml文件中的配置运行,大大提高了 Redis 服务的性能和可用性。
总结
通过以上内容,我们详细介绍了如何利用 Docker 技术搭建 Redis 的开发服务,从基础的快速入门,到生产级别的配置优化,再到使用 Docker Compose 进行全栈部署,涵盖了 Redis 容器化部署的各个关键环节。Docker 与 Redis 的结合,为我们提供了高效、灵活、安全的开发和部署解决方案,无论是在开发环境中快速迭代,还是在生产环境中稳定运行,都具有显著的优势。
在未来的软件开发过程中,随着容器化技术的不断发展和普及,相信 Docker 部署 Redis 的应用场景会越来越广泛。同时,我们也需要不断关注技术的更新和优化,例如 Redis 的新版本特性、Docker 的新功能等,以便更好地利用这些技术为我们的项目服务。希望本文能够帮助各位互联网软件开发人员在 Redis 开发服务搭建的道路上少走弯路,顺利实现项目目标。如果在实践过程中有任何疑问或心得,欢迎在评论区留言交流,让我们共同进步。
相关推荐
- 订单超时自动取消业务的 N 种实现方案,从原理到落地全解析
-
在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...
- 使用Spring Boot 3开发时,如何选择合适的分布式技术?
-
作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...
- 数据库内存爆满怎么办?99%的程序员都踩过这个坑!
-
你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...
- springboot利用Redisson 实现缓存与数据库双写不一致问题
-
使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...
- 外贸独立站数据库炸了?对象缓存让你起死回生
-
上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...
- 手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁
-
为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...
- 如何设计一个支持百万级实时数据推送的WebSocket集群架构?
-
面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...
- Redis数据结构总结——面试最常问到的知识点
-
Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...
- skynet服务的缺陷 lua死循环
-
服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...
- 七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得
-
前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...
- mysql mogodb es redis数据库之间的区别
-
1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...
- redis,memcached,nginx网络组件
-
1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...
- SpringBoot+Vue+Redis实现验证码功能
-
一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...
- AWS MemoryDB 可观测最佳实践
-
AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...
- 从0构建大型AI推荐系统:实时化引擎从工具到生态的演进
-
在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
Java SE Development Kit 8u441下载地址【windows版本】
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
Oracle如何创建用户,表空间(oracle19c创建表空间用户)
-
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (83)
- php redis (97)
- redis 存储 (67)
- redis 锁 (74)
- 启动 redis (73)
- redis 时间 (60)
- redis 删除 (69)
- redis内存 (64)
- redis并发 (53)
- redis 主从 (71)
- redis同步 (53)
- redis结构 (53)
- redis 订阅 (54)
- redis 登录 (62)
- redis 面试 (58)
- redis问题 (54)
- 阿里 redis (67)
- redis的缓存 (57)
- lua redis (59)
- redis 连接池 (64)