当前位置: 首页 > news >正文

docker容器高效连接 Redis 的方式

在微服务架构中,Redis 是一种常见的高效缓存解决方案,通常用于存储临时数据、会话信息或 token。如何在服务容器中高效、稳定地连接 Redis 是架构设计中的一个重要环节。

这篇博客将以实际项目为例,详细介绍如何配置 Flask 应用中的服务容器连接宿主机上的 Redis 服务.
 

📦 一、服务架构概述

通常,我们的应用程序运行在容器中,而 Redis 可以运行在宿主主机上或者单独的容器内。为了避免不必要的端口映射和复杂的网络配置,以下介绍的是如何通过容器中的 Flask 应用连接宿主机上的 Redis 服务。

架构图可以简单地表示为:
+-----------------+      +-----------------+
|                 |      |                 |
|   Flask 容器    | ---> | Redis 服务 (宿主机)|
|                 |      |                 |
+-----------------+      +-----------------+
 

⚙️ 二、Redis 容器与 Flask 服务容器的网络配置

宿主机上 Redis 服务的配置

首先,我们需要在宿主机上运行 Redis 并确保其对外开放接口,允许来自容器的连接。

  1. 安装 Redis (如果尚未安装):
     

    sudo apt-get install redis-server
    

2 配置 Redis 监听所有接口: 打开 Redis 的配置文件 /etc/redis/redis.conf,确保 bind 选项设置为 0.0.0.0,允许来自外部的连接: 
 

bind 0.0.0.0

并确保将 Redis 配置为带有密码保护:

requirepass 123...

3.重启 Redis 服务:

sudo systemctl restart redis-server

 4.允许防火墙端口: 开放 Redis 的端口 6379,确保 Flask 容器可以连接:

sudo ufw allow 6379

🌐 三、Flask 服务容器如何连接 Redis

当 Redis 在宿主主机上运行时,Flask 容器需要通过宿主机的 IP 地址来连接到 Redis 服务。假设宿主机的 IP 地址为 172.29.11.11,以下是如何在 Flask 应用中配置 Redis 连接。

1. Redis 连接配置

在 Flask 应用的代码中,我们通过 redis.StrictRedis 来连接 Redis。
 

import redis# 配置 Redis 连接
redis_client = redis.StrictRedis(host='172.29.11.11',  # 宿主机的 IP 地址port=6379,             # Redis 端口password='123...',   # Redis 的密码db=0,                  # 默认数据库decode_responses=True,  # 自动解码 Redis 响应socket_timeout=5        # 设置超时时间
)
2. Flask 容器的运行

假设你已经有了一个 Flask 服务的 Docker 容器,运行该容器时的命令如下:
 

docker run -d --name myapp -p 5000:5000 \-e REDIS_HOST=172.29.11.11 \${{ secrets.DOCKER_HUB_USERNAME }}/myapp:${{ github.sha }}

这个命令使用环境变量 REDIS_HOST 将 Redis 的宿主机 IP 地址注入到容器中。在 Flask 应用中,你也可以通过读取这个环境变量来动态配置 Redis 连接。
 

import osredis_client = redis.StrictRedis(host=os.getenv('REDIS_HOST', 'localhost'),  # 通过环境变量读取 Redis 地址port=6379,password='123...',db=0,decode_responses=True,socket_timeout=5
)
总结:从容器中连接宿主主机的最佳实践
  • 网络配置:确保宿主机的 Redis 监听所有接口 (0.0.0.0) 并开放了防火墙端口。
  • 连接方式:使用宿主机的 IP 地址来连接 Redis,而不是 localhost
  • 安全性:通过密码 (requirepass) 来确保 Redis 连接的安全性。
http://www.lryc.cn/news/433446.html

相关文章:

  • 手撕Python之生成器、装饰器、异常
  • LabVIEW步进电机控制方式
  • vllm源码解析(五):LLM模型推理
  • 数学建模笔记——熵权法(客观赋权法)
  • XGBoost算法-确定树的结构
  • concurrentHashMap线程安全实现的原理
  • 域名证书,泛域名证书,sni
  • Pytest夹具autouse参数使用。True表示会自动在测试中使用,而无需显式指定
  • Linux:归档及压缩
  • jenkins 安装
  • mysql学习教程,从入门到精通,MySQL 删除数据库教程(6)
  • C语言:刷题日志(2)
  • 微带结环行器仿真分析+HFSS工程文件
  • 怎么仿同款小程序的开发制作方法介绍
  • 音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现
  • 0.91寸OLED屏幕大小的音频频谱,炫酷
  • 6. LinkedList与链表
  • Statcounter Global Stats 提供全球统计数据信息
  • Linux kernel中的dts dtsi dtb dtc dtb.img dtbo.img
  • 微信小程序页面制作——个人信息
  • 使用C++11的`std::async`执行异步任务:实战指南
  • 【高阶数据结构】B树、B+树、B*树
  • HBuilderx中vue页面引用scss样式
  • 粒子群算法原理的示例介绍
  • GNU/Linux - Open函数使用的O_CLOEXEC flag
  • AWQ量化(Activation-aware Weight Quantization)
  • SprinBoot+Vue体育商品推荐的设计与实现
  • 【Python基础】Python函数
  • 【超简单】1分钟解决ppt全文字体一键设置
  • 数组与贪心算法——179、56、57、228(2简2中)