当前位置: 首页 > 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 连接的安全性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LabVIEW灵活集成与调试的方法
  • 【Hot100】LeetCode—763. 划分字母区间
  • 线程的四种操作
  • python内置模块datetime.datetime类详细介绍
  • 2024.9.8
  • Android Framework(四)WMS-窗口显示流程——窗口创建与添加
  • 搭建一个本地 SMTP 服务器
  • 08-图8 How Long Does It Take(C)
  • 移动应用门户实现的技术方案
  • 用了虚拟机后,本机摄像头打不开了(联想电脑thinkpad)
  • [数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别
  • 2024国赛数学建模B题完整分析参考论文38页(含模型和可运行代码)
  • 家里有猫用宠物空气净化器有用吗?希喂、米家、有哈哪款更好
  • 在springboot中如何使用Jetty替换Tomcat
  • 同样数据源走RTMP播放延迟低还是RTSP低?
  • 【附node操作实例】redis简明入门系列—字符串类型
  • android图片蒙层
  • Git学习与使用心得(1)—— 初始化
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • nfs客户端进程变D,延伸linux的lock
  • REST架构的思考
  • Spark学习笔记之相关记录
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于字符编码你应该知道的事情
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 将回调地狱按在地上摩擦的Promise
  • 目录与文件属性:编写ls
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 深度解析利用ES6进行Promise封装总结
  • 试着探索高并发下的系统架构面貌
  • 数据仓库的几种建模方法
  • 说说动画卡顿的解决方案
  • 算法系列——算法入门之递归分而治之思想的实现
  • 以太坊客户端Geth命令参数详解
  • 【干货分享】dos命令大全
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 选择阿里云数据库HBase版十大理由
  • ​Java基础复习笔记 第16章:网络编程
  • ​数据链路层——流量控制可靠传输机制 ​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #Z2294. 打印树的直径
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (1)SpringCloud 整合Python
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (solr系列:一)使用tomcat部署solr服务
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307