签入版本

This commit is contained in:
2026-09-12 19:09:28 +08:00
commit 4eae62bc17
803 changed files with 105034 additions and 0 deletions
+190
View File
@@ -0,0 +1,190 @@
# ============================================================================
# Dockerfile - Flask 应用容器镜像构建文件
# ============================================================================
# 项目名称:flask_antdvue
# 功能描述:构建 Flask 后端应用的生产级 Docker 镜像
# 维护团队:后端架构组
# 最后更新:2026-07-23
# 基础镜像:Python 3.9(官方镜像)
# ============================================================================
# ----------------------------------------------------------------------------
# 基础镜像选择
# ----------------------------------------------------------------------------
# 使用 Python 3.9 官方镜像
# 生产环境建议:使用 slim 或 alpine 版本以减小镜像体积
# 示例:python:3.9-slim(体积约 180MB)或 python:3.9-alpine(体积约 50MB)
FROM python:3.9-slim
# ----------------------------------------------------------------------------
# 镜像元数据(标签)
# ----------------------------------------------------------------------------
# 镜像作者信息
LABEL maintainer="djangoadmin@126.com"
# 添加更多标签便于管理和追溯
LABEL org.opencontainers.image.title="flask_antdvue" \
org.opencontainers.image.description="Flask Backend Service for Project" \
org.opencontainers.image.version="1.0.0" \
org.opencontainers.image.created="2026-07-23" \
org.opencontainers.image.source="https://github.com/your-org/flask_antdvue"
# 兼容旧版 MAINTAINER 指令(已废弃,但保留兼容性)
MAINTAINER admin@example.com # 建议使用有效邮箱
# ----------------------------------------------------------------------------
# Python 环境变量配置
# ----------------------------------------------------------------------------
# PYTHONUNBUFFERED:禁用 Python 输出缓冲,日志实时输出(容器日志关键)
ENV PYTHONUNBUFFERED 1
# PYTHONDONTWRITEBYTECODE:禁止生成 .pyc 字节码文件,减小镜像体积
ENV PYTHONDONTWRITEBYTECODE 1
# PYTHONPATH:Python 模块搜索路径(可选)
# ENV PYTHONPATH /data/apps
# ----------------------------------------------------------------------------
# 系统级配置(时区/语言环境)
# ----------------------------------------------------------------------------
# 设置容器时区为中国时区(统一日志时间戳)
ENV TZ Asia/Shanghai
# 设置语言环境(避免中文乱码问题)
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
# ----------------------------------------------------------------------------
# 系统依赖安装(需在 Python 依赖之前安装)
# ----------------------------------------------------------------------------
# 安装系统级工具和依赖库(根据项目需要添加)
# 此处使用了 Debian 包管理器(官方镜像基于 Debian)
RUN apt-get update && apt-get install -y --no-install-recommends \
# 常用网络工具(调试和健康检查需要)
curl \
wget \
# 编译工具(部分 Python 包需要编译,如 uwsgi)
build-essential \
# 数据库客户端库(如使用 PostgreSQL/MySQL)
# libpq-dev \
# default-libmysqlclient-dev \
# 图像处理库(如使用 Pillow 处理图片)
# libjpeg-dev \
# libpng-dev \
# 系统清理(减小镜像体积)
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /tmp/* /var/tmp/*
# ----------------------------------------------------------------------------
# Python 包管理器配置
# ----------------------------------------------------------------------------
# 设置国内 PyPI 镜像源(加速依赖下载,网络环境不同可调整)
# 阿里云镜像:http://mirrors.aliyun.com/pypi/simple
# 清华大学镜像:https://pypi.tuna.tsinghua.edu.cn/simple
# 中科大镜像:https://pypi.mirrors.ustc.edu.cn/simple
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple \
&& pip config set install.trusted-host mirrors.aliyun.com
# 升级 pip 和 setuptools(确保最新版本,提升安装兼容性)
RUN python -m pip install --upgrade pip \
&& pip install --upgrade setuptools wheel
# ----------------------------------------------------------------------------
# 创建应用工作目录
# ----------------------------------------------------------------------------
# 创建容器内工作目录(标准应用目录结构)
RUN mkdir -p /data/apps \
# 创建日志目录(便于日志挂载和收集)
&& mkdir -p /data/apps/logs \
# 创建上传文件目录(数据持久化)
&& mkdir -p /data/apps/uploads \
# 创建临时文件目录
&& mkdir -p /data/apps/tmp
# 设置工作目录(后续所有操作默认在此目录)
WORKDIR /data/apps
# ----------------------------------------------------------------------------
# Python 依赖安装优化(利用 Docker 层缓存)
# ----------------------------------------------------------------------------
# 策略说明:
# 1. 先复制 requirements.txt(依赖声明文件)
# 2. 安装依赖(此层会被缓存,只要 requirements.txt 不变则不会重新安装)
# 3. 最后复制应用代码(代码变更不影响依赖层,大幅提升构建速度)
# 复制依赖文件(利用 Docker 缓存,仅当 requirements.txt 变更时重新安装)
COPY requirements.txt .
# 安装 Python 依赖包(使用 --no-cache-dir 减小镜像体积)
# 生产环境建议固定版本号,避免依赖版本漂移
RUN pip install --no-cache-dir -r requirements.txt
# ----------------------------------------------------------------------------
# 安装 gunicorn(高性能 WSGI 服务器,生产环境推荐)
# 配合 gevent worker 支持高并发
RUN pip install --no-cache-dir gunicorn gevent
# 如果需要使用 gunicorn(替代方案):
# RUN pip install --no-cache-dir gunicorn
# ----------------------------------------------------------------------------
# 复制应用代码(最后复制,利用 Docker 缓存)
# ----------------------------------------------------------------------------
# 将当前目录(项目根目录)所有文件复制到容器工作目录
# 注意:使用 .dockerignore 文件排除不需要的文件(如 .git、__pycache__)
COPY . /data/apps/
# 或者使用单个 COPY 命令(推荐方式):
# COPY . .
# ----------------------------------------------------------------------------
# 创建非特权用户(安全最佳实践)
# ----------------------------------------------------------------------------
# 创建专用用户和用户组(避免容器使用 root 运行应用)
# 参数说明:-r(系统用户),-s(指定 shell),-m(创建家目录)
RUN groupadd -r flask_user && useradd -r -g flask_user flask_user
# 修改应用目录所有者为 flask_user(确保应用有写入权限)
RUN chown -R flask_user:flask_user /data/apps
# 切换到非特权用户(后续命令将以该用户身份执行)
USER flask_user
# ----------------------------------------------------------------------------
# 健康检查配置(容器健康状态监控)
# ----------------------------------------------------------------------------
# 定义健康检查命令(需应用提供 /health 端点)
# 生产环境建议使用 curl 或 wget 检查
HEALTHCHECK --interval=30s --timeout=5s --retries=3 --start-period=10s \
CMD curl -f http://localhost:8021/health || exit 1
# ----------------------------------------------------------------------------
# 容器暴露端口声明
# ----------------------------------------------------------------------------
# 声明应用监听端口(仅用于文档说明,实际映射在 docker-compose 中配置)
EXPOSE 8021
# ----------------------------------------------------------------------------
# 容器启动命令
# ----------------------------------------------------------------------------
# 生产环境启动命令(使用 gunicorn 启动应用)
# 配置文件:gunicorn.conf.py(在项目根目录)
CMD ["gunicorn", "-c", "gunicorn.conf.py", "src.wsgi:app"]
# ============================================================================
# 附录:构建和测试指南
# ============================================================================
# 1. 构建镜像:
# docker build -t flask_antdvue:latest .
#
# 2. 构建时指定版本号:
# docker build -t flask_antdvue:v1.0.0 .
#
# 3. 使用构建参数(多环境构建):
# docker build --build-arg ENV=production -t flask_antdvue:prod .
#
# 4. 查看镜像层信息:
# docker history flask_antdvue:latest
#
# 5. 运行容器测试:
# docker run -d -p 8021:8021 flask_antdvue:latest
#
# 6. 进入容器调试:
# docker run -it --entrypoint /bin/bash flask_antdvue:latest