docker容器高效連接Redis的方法步驟
引言
在微服務(wù)架構(gòu)中,Redis 是一種常見的高效緩存解決方案,通常用于存儲(chǔ)臨時(shí)數(shù)據(jù)、會(huì)話信息或 token。如何在服務(wù)容器中高效、穩(wěn)定地連接 Redis 是架構(gòu)設(shè)計(jì)中的一個(gè)重要環(huán)節(jié)。
這篇博客將以實(shí)際項(xiàng)目為例,詳細(xì)介紹如何配置 Flask 應(yīng)用中的服務(wù)容器連接宿主機(jī)上的 Redis 服務(wù).
一、服務(wù)架構(gòu)概述
通常,我們的應(yīng)用程序運(yùn)行在容器中,而 Redis 可以運(yùn)行在宿主主機(jī)上或者單獨(dú)的容器內(nèi)。為了避免不必要的端口映射和復(fù)雜的網(wǎng)絡(luò)配置,以下介紹的是如何通過容器中的 Flask 應(yīng)用連接宿主機(jī)上的 Redis 服務(wù)。
架構(gòu)圖可以簡單地表示為:
+-----------------+ +-----------------+
| | | |
| Flask 容器 | ---> | Redis 服務(wù) (宿主機(jī))|
| | | |
+-----------------+ +-----------------+
二、Redis 容器與 Flask 服務(wù)容器的網(wǎng)絡(luò)配置
宿主機(jī)上 Redis 服務(wù)的配置
首先,我們需要在宿主機(jī)上運(yùn)行 Redis 并確保其對(duì)外開放接口,允許來自容器的連接。
安裝 Redis (如果尚未安裝):
sudo apt-get install redis-server
配置 Redis 監(jiān)聽所有接口: 打開 Redis 的配置文件 /etc/redis/redis.conf
,確保 bind
選項(xiàng)設(shè)置為 0.0.0.0
,允許來自外部的連接:
bind 0.0.0.0
并確保將 Redis 配置為帶有密碼保護(hù):
requirepass 123...
重啟 Redis 服務(wù):
sudo systemctl restart redis-server
允許防火墻端口: 開放 Redis 的端口 6379
,確保 Flask 容器可以連接:
sudo ufw allow 6379
三、Flask 服務(wù)容器如何連接 Redis
當(dāng) Redis 在宿主主機(jī)上運(yùn)行時(shí),F(xiàn)lask 容器需要通過宿主機(jī)的 IP 地址來連接到 Redis 服務(wù)。假設(shè)宿主機(jī)的 IP 地址為 172.29.11.11
,以下是如何在 Flask 應(yīng)用中配置 Redis 連接。
1. Redis 連接配置
在 Flask 應(yīng)用的代碼中,我們通過 redis.StrictRedis
來連接 Redis。
import redis # 配置 Redis 連接 redis_client = redis.StrictRedis( host='172.29.11.11', # 宿主機(jī)的 IP 地址 port=6379, # Redis 端口 password='123...', # Redis 的密碼 db=0, # 默認(rèn)數(shù)據(jù)庫 decode_responses=True, # 自動(dòng)解碼 Redis 響應(yīng) socket_timeout=5 # 設(shè)置超時(shí)時(shí)間 )
2. Flask 容器的運(yùn)行
假設(shè)你已經(jīng)有了一個(gè) Flask 服務(wù)的 Docker 容器,運(yùn)行該容器時(shí)的命令如下:
docker run -d --name myapp -p 5000:5000 \ -e REDIS_HOST=172.29.11.11 \ ${{ secrets.DOCKER_HUB_USERNAME }}/myapp:${{ github.sha }}
這個(gè)命令使用環(huán)境變量 REDIS_HOST
將 Redis 的宿主機(jī) IP 地址注入到容器中。在 Flask 應(yīng)用中,你也可以通過讀取這個(gè)環(huán)境變量來動(dòng)態(tài)配置 Redis 連接。
import os redis_client = redis.StrictRedis( host=os.getenv('REDIS_HOST', 'localhost'), # 通過環(huán)境變量讀取 Redis 地址 port=6379, password='123...', db=0, decode_responses=True, socket_timeout=5 )
總結(jié):從容器中連接宿主主機(jī)的最佳實(shí)踐
- 網(wǎng)絡(luò)配置:確保宿主機(jī)的 Redis 監(jiān)聽所有接口 (
0.0.0.0
) 并開放了防火墻端口。 - 連接方式:使用宿主機(jī)的 IP 地址來連接 Redis,而不是
localhost
。 - 安全性:通過密碼 (
requirepass
) 來確保 Redis 連接的安全性。
以上就是docker容器高效連接Redis的方法步驟的詳細(xì)內(nèi)容,更多關(guān)于docker容器連接Redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Docker如何啟動(dòng)一個(gè)Centos鏡像
本篇文章主要介紹了詳解Docker如何啟動(dòng)一個(gè)Centos鏡像,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Linux平臺(tái)搭建docker環(huán)境并簡單使用示例
這篇文章主要介紹了Linux平臺(tái)搭建docker環(huán)境及簡單使用方法,需要的朋友參考下吧2017-01-01CentOS7.2服務(wù)器上搭建Docker私有鏡像倉庫操作示例
這篇文章主要介紹了CentOS7.2服務(wù)器上搭建Docker私有鏡像倉庫操作,結(jié)合實(shí)例形式分析了基于CentOS7.2平臺(tái)docker安裝、證書和密鑰生成、私有鏡像創(chuàng)建與啟動(dòng)等操作相關(guān)命令與使用技巧,需要的朋友可以參考下2018-06-06使用Golang玩轉(zhuǎn)Docker API的實(shí)踐
這篇文章主要介紹了使用Golang玩轉(zhuǎn)Docker API的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Docker搭建Jenkins并自動(dòng)化打包部署項(xiàng)目的步驟
本文主要介紹了Docker搭建Jenkins并自動(dòng)化打包部署項(xiàng)目的步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03docker<容器數(shù)據(jù)卷-v>對(duì)容器內(nèi)數(shù)據(jù)持久化詳解(備份)
容器的數(shù)據(jù)持久化主要是指宿主機(jī)與容器,以及容器與容器之間進(jìn)行數(shù)據(jù)交互,下面這篇文章主要給大家介紹了關(guān)于docker<容器數(shù)據(jù)卷-v>對(duì)容器內(nèi)數(shù)據(jù)持久化的相關(guān)資料,需要的朋友可以參考下2023-03-03Docker compose up -d與Docker restart的區(qū)別
本文主要介紹了Docker compose up -d與Docker restart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)
這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08