如何将带Redis dump.rdb的Django应用迁移至Docker并配置Redis访问?
把Django+Redis项目迁移到Docker的分步指南
嘿,我来帮你搞定这个迁移的事儿,尤其是要用上你现有的dump.rdb数据,咱们一步步来拆解:
一、先搞定Redis的Docker配置
你手里的dump.rdb是Redis的持久化数据文件,Redis官方镜像默认把持久化目录设为/data,所以咱们要把本地的dump.rdb挂载到容器的这个目录里,这样Redis启动时会自动加载数据。
注意点:
- 确保本地的
dump.rdb所在目录权限没问题,Redis容器默认用redis用户(UID 999)运行,你可以先修改本地文件权限:chown 999:999 ./dump.rdb - 如果不想改权限,也可以在启动容器时指定用户为root,但生产环境不推荐这么做。
二、完善你的Django Dockerfile
你现有的Dockerfile开头已经有了,咱们把它补全,确保能正确运行Django应用:
FROM python:2.7.14 ENV PYTHONUNBUFFERED 1 # 创建代码目录并设置工作目录 RUN mkdir /code WORKDIR /code # 复制依赖文件并安装 COPY requirements.txt /code/ RUN pip install --upgrade pip && pip install -r requirements.txt # 复制整个项目代码到容器(开发环境可以用挂载替代,后面说) COPY . /code/ # 启动命令(假设你的Django项目用manage.py runserver,生产环境建议用gunicorn) CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
三、用Docker Compose编排两个服务
因为你有Django和Redis两个服务,用Docker Compose来管理会更方便,不用手动启动两个容器还得处理网络。在项目根目录创建docker-compose.yml:
version: '3' services: web: build: . ports: - "8000:8000" # 开发环境挂载本地代码目录,修改代码后容器自动生效 volumes: - .:/code # 依赖Redis服务,确保Redis先启动 depends_on: - redis # 设置环境变量,让Django能找到Redis environment: - REDIS_HOST=redis - REDIS_PORT=6379 redis: image: redis:latest ports: - "6379:6379" # 挂载本地的dump.rdb到Redis容器的/data目录 volumes: - ./dump.rdb:/data/dump.rdb # 启动Redis时加载持久化数据(默认会自动加载,这里可以显式指定配置) command: redis-server --appendonly yes
四、关于挂载代码目录的疑问解答
你提到挂载代码目录会不会有问题,分两种情况说:
- 开发环境:挂载本地代码目录是非常方便的,修改代码后不用重新构建镜像,容器里的代码会实时更新。但要注意权限问题:如果容器里的用户和本地用户UID不一致,可能会出现无法写入文件(比如生成pyc文件)的情况。解决办法是在Dockerfile里创建一个和本地UID一致的用户:
# 替换成你的本地UID,比如运行`id -u`得到的数值 RUN useradd -m -u 1000 django USER django - 生产环境:不建议挂载本地代码目录,最好是把代码复制到容器里(就是Dockerfile里的
COPY . /code/),这样容器是独立的,不依赖本地文件系统,更稳定安全。
最后一步:启动服务
在项目根目录运行:
docker-compose up --build
这样Redis会自动加载你的dump.rdb数据,Django也能连接到Redis服务了。记得把Django里的Redis连接配置改成REDIS_HOST=redis(因为Compose里的服务名就是容器的主机名),而不是原来的localhost。
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

