一、使用小体积镜像构建django镜像
1.1、拉取slim镜像,安装上必要依赖
1、Dockerfile
FROM python:3.7-slim
# 避免生成 .pyc 和缓冲输出
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
LANG=C.UTF-8
# 设置工作目录
WORKDIR /usr/local/bin
# 替换 APT 源为清华源,并安装依赖
RUN set -x && \
# 清空所有已有的 sources.list 和 sources.list.d 内容
rm -f /etc/apt/sources.list && \
rm -rf /etc/apt/sources.list.d && \
# 写入阿里云源(bookworm 视实际基础镜像版本而定)
echo "deb http://mirrors.aliyun.com/debian bookworm main contrib non-free" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free" >> /etc/apt/sources.list && \
# 更新源并安装依赖
apt-get update && \
apt-get install -y --no-install-recommends \
gcc \
build-essential \
libpq-dev \
curl && \
rm -rf /var/lib/apt/lists/*
# 启动命令
CMD ["/usr/local/bin/python", "--version"]
2、build.sh 构建镜像脚本
docker build -t python37-slim:v1 ./
生成的镜像名:python37-slim:v1
1.2、基于slim镜像,安装上python库
1、requirement.txt
Django==3.2.7
uWSGI==2.0.21
2、Dockerfile
FROM python37-slim:v1
# 避免生成 .pyc 和缓冲输出
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
LANG=C.UTF-8
# 设置工作目录
WORKDIR /app/requirement
# 复制项目代码
COPY ./requirement.txt /app/requirement
# 使用清华源安装 pip 包
RUN pip install --no-cache-dir --upgrade pip --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn \
--trusted-host files.pythonhosted.org && \
pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn \
--trusted-host files.pythonhosted.org \
-r /app/requirement/requirement.txt
# 启动命令
CMD ["ls", "/usr/local/bin"]
3、build.sh 构建镜像脚本
docker build -t base-image:v1 ./
生成镜像:base-image:v1
1.3、django项目基于slim镜像,生成系统镜像
注意:在项目根目录下
1、Dockerfile
FROM base-image:v1
# 避免生成 .pyc 和缓冲输出
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
LANG=C.UTF-8
# 设置工作目录
WORKDIR /app/simple_sys
# 复制项目代码
COPY . /app/simple_sys
# 启动命令
CMD ["/usr/local/bin/uwsgi", "--ini", "/app/simple_sys/uwsgi.ini"]
2、simple_sys : django项目
uwsgi.ini
[uwsgi]
# Django 项目配置
chdir = /app/simple_sys
module = simple_sys.wsgi:application
home = /usr/local
# 网络配置(推荐使用 http 方式测试)
http = :8000
# ;socket = 127.0.0.1:8000 # 如果要用 socket,请配合 Nginx 使用
# 进程和线程配置
processes = 4
threads = 8
enable-threads = true
master = true
listen = 2048
limit-as = 2048
# 日志配置(注意路径权限)
logto = /app/simple_sys/logs/uwsgi.log
log-maxsize = 10485760
vacuum = true
# 守护进程模式(⚠️ 在 Docker 中慎用!)
# daemonize = /app/simple_sys/log/uwsgi.log
3、build.sh 构建镜像的脚本
docker build -t simple-sys:v1 ./