Windos 使用 Docker 部署最新版 Redis 并进行外部链接

背景

最近在开发基于 Django 的电商网站,使用 Redis 进行商品信息的缓存,由于使用 Windows 进行开发,Redis 自身不支持 Windows系统,查阅了很多资料只有几种办法,要么使用 Github 上的旧版 Redis,要么使用 Win10 以上支持 WSL 的子系统,考虑到 Github 不能第一时间使用最新版,WSL 自身不稳定等因素,使用 Docker 部署 Rdis 镜像来解决 Windows 使用 Redis 的问题。


2022.7.30 更新
开发过程中发现 Docker 的另一种用法,通过在 Dokcer 中新建 Python 镜像容器,可以解决 Windows 环境中缺乏编译器等问题,直接使用文件映射和端口映射的方式,可以解决 Python 开发环境部署问题。

已知问题:

  1. 使用 Docker 进行环境部署无法直接通过 Pycharm 跳转代码错误位置。
  2. 无法使用断点调试功能,原因是命令行和 Pycharm 分离。

准备工作

  1. Docker 最新版
  2. Redis 最新版压缩文件
  3. Redis 图形化控制软件 RDM
  4. Dokcer 镜像市场

开始部署

安装 Redis

Redis 直接下载安装,安装完毕后直接打开命令提示符,使用以下代码进行 Redis 的安装,也可以使用图形界面进行安装。

#在docker仓库搜索redis
docker search redis
#下载redis到本地仓库不加版本号默认是最新版
docker pull redis
#查看下载好的容器
docker images

如果下载成功,使用命令显示的效果如图

标签名称 标签意义
REPOSITORY 标签表示当前下载的镜像名称
TAG 表示当前镜像的版本
IMAGE ID 是 Docker 自身对镜像设置的 ID
CREATED 表示这个镜像是什么时候创建的
SIZE 表示镜像大小

能够成功显示以上的内容,则代表已经成功安装 Redis,随后我们需要解压之前下载的 Redis 压缩包,将其中的 redis.config 文件解压出来并进行修改。

修改 Redis 配置文件

Redis 的默认配置文件中,只允许进行本地连接,同时以保护模式进行运行,不允许远程连接,在实际开发当中有许多不便,需要对配置文件当中的部分内容进行修改。

修改前 修改后 作用
bind 127.0.0.1 bind 0.0.0.0 允许外部连接
protected-mode yes protected-mode no 关闭保护模式
appendonly no appendonly yes 开启持久化
requirepass " " requirepass 你需要设置的密码 设置密码

在这些配置当中,一些配置前面存在 # 号,将 # 删去才能使该配置生效

启动 Redis

修改完配置文件后,记录下配置文件所在的位置,我保存在桌面上,因此路径为

扫描二维码关注公众号,回复: 15705294 查看本文章

C:\Users\TOM\Desktop\redis.conf

接下来使用该路径进行 Redis 的启动,具体启动代码如下:

docker run -p 6379:6379 --name iredis -v C:\Users\TOM\Desktop\redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis:latest redis-server /etc/redis/redis.conf --appendonly yes

参数解析:

参数名 作用
docker 调用docker命令启动容器
run 启动某个容器
-p 6379:6379 将容器内的 6379 端口与宿主机的 6379 端口进行映射
–name iredis 该容器的名字命名为 iredis
-v 修改的配置文件路径 : Docker 中的配置路径 将本地的配置文件与 Docker 中的配置文件进行映射替换
-v 本地持久化保存文件路径 : Docker 中默认持久化路径 替换持久化保存路径
-d 后台运行,不需要的可以删去该参数
redis:latest 运行 redis 镜像中 TAG 为 latest 的镜像
redis-server /etc/redis/redis.conf 默认启动参数,这里的配置文件已经在前面被我们替换为桌面上的配置文件
–appendonly yes 开启 AOF 实现数据持久化

成功启动后结果如图
在这里插入图片描述
如果去掉 -d 参数,则执行结果如图:
在这里插入图片描述
到这里已经完成了 Windows 下的 Docker 容器部署 Redis 的工作,接下来是在宿主机中使用 RDM 软件和 Django 进行连接。

远程连接

RDM 连接数据库

首先安装我们的 RDM 软件,安装完成后进行连接。
在这里插入图片描述
参数解析

参数名 作用
Name 给当前的链接取名,随便输入一个你能看懂的即可
Host Redis 所在的 IP,我们使用本地的 Docker 部署,因此填写宿主机的 IP,本地即为 127.0.0.1 也可以填写 localhost,二者等效
Port Docker 容器映射的端口号,即命令提示符中 -p 参数填写的后一个端口号,由于我们示范使用的是 -p 6379:6379 ,因此填写6379,如果自行指定了其他端口,填写你指定的端口
auth 填写配置文件中 requirepass 参数的密码

填写完毕后先点击下方的 Test Connection 进行链接测试,弹出成功页面后再点击 OK 进行连接保存。
在这里插入图片描述
在左侧就可以看到成功连接了 Redis 数据库。

Django 连接数据库

折腾了半天,终于可以连接数据库了,Django 支持使用 Redis 进行缓存,这里我们需要下载对应的第三方库进行 Redis 的连接。

# 直接下载 django-redis
pip install django_redis
# 通过豆瓣源加速下载
pip install -i https://pypi.douban.com/simple django_redis

安装完成后打开项目中的 setting.py 文件进行配置

# redis配置
CACHES = {
    
    
	# 设置名为 default 的链接
    "default": {
    
    
    	# 设置缓存功能
        "BACKEND": "django_redis.cache.RedisCache",
        # 设置 redis 的链接路径
        "LOCATION": "redis://default:redis@localhost:6379/0", # 安装redis的主机的 IP 和 端口
        "OPTIONS": {
    
    
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
    
    
                "max_connections": 1000,
                "encoding": 'utf-8'
            },
        # 添加 redis 的密码
        "PASSWORD": "redis"
        }
    }
}

配置完成后,使用 django 自带的 shell 进行测试

# 启动 Django 自带的命令行
python .\manage.py shell

启动后进行测试

# 导入 django-redis 库
from django_redis import get_redis_connection
# 使用 dafult 配置进行连接
con = get_redis_connection('default')
# 测试是否连接成功
con.ping()
# 测试成功结果
>>> con.ping()
True

Docker 部署 Python 镜像

Docker 拉取对应镜像版本

# 拉取 Python38 版本镜像
docker pull rackspacedot/python38
# 查看下载结果
docker ps -a
|CONTAINER ID|IMAGE|COMMAND|CREATED|STATUS|PORTS|NAMES|
|e5cedc7e1e2d|python:3.8|"python3"|21 hours ago|Exited (137)|20 hours ago|
# 新建镜像容器,并配置文件目录映射
docker run -it -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 --name 自定义的名字  镜像名称:镜像tag
docker run -it -p 8080:8080 -v c:\Destop\DjangoCode:/Code --name Python_Django python:3.8
# 启动镜像容器
docker start Python_Django
# 进入容器的交互命令终端
docker exec -it 容器id /bin/bash
docker exec -it e5cedc7e1e2d /bin/bash

Docker 容器的连接

双向连接

通过 Docker 的 network 命令创建一个网络,并将所有的容器加入到该网络中,网络中的容器可以通过容器 ID 或是容器名直接进行访问,官方文档地址

# 创建容器网络
docker network create [OPTIONS] NETWORK
docker netword create ContainNetwork
# 将容器加入网络
docker network connect [OPTIONS] NETWORK CONTAINER
dokcer network connect ContainNetwork reids

单向连接

单项连接使用的是 Docker 较早的配置 --link 参数,未来可能废弃,请注意使用

# 连接容器A和容器B,只能A访问B,B无法访问A,需在创建容器时就指定需要连接的关系
docker run 容器A --link 容器B 
docker run Python_Django --link redis --link mysql # 可单向连接多个容器

至此完成了所有需要配置的内容,需要协助的朋友可以发站内信或是邮件到 [email protected] 有看到会回消息,最近工作比较忙可能不及时。

猜你喜欢

转载自blog.csdn.net/qq_20728575/article/details/125639618