You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅通过Dockerfile为Django应用集成Memcached的实现方法

仅通过Dockerfile集成Django与Memcached的实现方案

注:单容器同时运行多个服务不符合容器单进程单职责的设计原则,生产环境优先推荐多容器编排方案,以下方案仅适用于本地开发、测试等不想使用docker-compose的场景

核心实现思路是通过supervisor进程管理工具,在同一个容器内同时拉起Memcached服务和Django应用进程,具体配置步骤如下:

  • 编写Dockerfile,完成系统依赖、Python依赖、项目代码的拷贝,配置supervisor作为启动入口
  • 编写supervisor配置,分别定义Memcached和Django的启动规则、自启策略
  • 修改Django配置文件,指向同容器内的Memcached服务地址

1. Dockerfile 示例

FROM python:3.11-slim

# 配置Python环境变量
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 安装系统依赖:Memcached服务、supervisor进程管理器
RUN apt-get update && apt-get install -y --no-install-recommends \
    memcached \
    supervisor \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# 安装Python依赖,requirements.txt中需要包含Django以及Memcached客户端(如pymemcache)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 拷贝项目代码
COPY . .

# 拷贝supervisor配置到容器内
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 暴露Django默认端口8000、Memcached默认端口11211
EXPOSE 8000 11211

# 启动supervisor管理所有服务进程
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

2. supervisor配置文件(supervisord.conf)

和Dockerfile放在同一目录下,配置两个服务的启动规则:

[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisord.log
pidfile=/run/supervisord.pid

[program:memcached]
command=/usr/bin/memcached -m 64 -p 11211 -u memcache
autostart=true
autorestart=true
stdout_logfile=/var/log/memcached.log
stderr_logfile=/var/log/memcached_err.log

[program:django]
# 可替换为生产环境启动命令,比如gunicorn启动指令
command=python manage.py runserver 0.0.0.0:8000
directory=/app
autostart=true
autorestart=true
stdout_logfile=/var/log/django.log
stderr_logfile=/var/log/django_err.log

Memcached启动参数中-m 64代表为服务分配64MB运行内存,可根据实际需求调整数值。

3. Django侧缓存配置

修改项目的settings.py,配置缓存后端为Memcached,地址指向本地11211端口:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

4. 构建与运行命令

  • 构建镜像:docker build -t django-with-memcached .
  • 启动容器:docker run -p 8000:8000 -p 11211:11211 django-with-memcached

注意事项

  • 若使用gunicorn、uWSGI等生产级WSGI服务器部署Django,直接替换supervisord.conf中Django段的启动命令即可
  • 该方案下两个服务共享容器的网络、存储资源,无法单独针对某一个服务做资源限制、故障隔离,不建议在生产环境使用

内容的提问来源于stack exchange,提问作者Devika B Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:09:23