温馨提示×

CentOS Python容器化如何实现

小樊
39
2025-12-15 19:19:07
栏目: 编程语言

在 CentOS 上容器化 Python 应用的可执行方案

一 环境准备

  • 安装 Docker 引擎(以 CentOS 7/8 为例):
    • 安装依赖与仓库:
      • sudo yum install -y yum-utils device-mapper-persistent-data lvm2
      • sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • 安装并启动服务:
      • sudo yum install -y docker-ce docker-ce-cli containerd.io
      • sudo systemctl start docker && sudo systemctl enable docker
    • 验证安装:
      • sudo docker run --rm hello-world
  • 准备应用骨架(示例):
    • 应用代码:app.py
      • from flask import Flask; app = Flask(name); @app.route(“/”); def h(): return “Hello, CentOS Python”; if name == “main”: app.run(host=“0.0.0.0”, port=5000)
    • 依赖清单:requirements.txt
      • flask==2.3.*
  • 说明:也可直接使用官方 python:3.x-slim 镜像构建,体积更小、构建更快;下文提供基于 CentOS 与基于 python 官方镜像 的两种 Dockerfile 示例。

二 构建镜像

  • 方式 A 基于 CentOS 官方镜像(系统级可控,体积较大)
    • Dockerfile
      • FROM centos:7
      • ENV PYTHONUNBUFFERED=1
      • RUN yum install -y python3 python3-pip && yum clean all
      • WORKDIR /app
      • COPY requirements.txt .
      • RUN pip3 install --no-cache-dir -r requirements.txt
      • COPY . .
      • EXPOSE 5000
      • CMD [“python3”, “app.py”]
    • 构建命令:docker build -t my-python-app:centos .
  • 方式 B 基于官方 python 镜像(推荐,镜像小、依赖新)
    • Dockerfile
      • FROM python:3.11-slim
      • WORKDIR /app
      • COPY requirements.txt .
      • RUN pip install --no-cache-dir -r requirements.txt
      • COPY . .
      • EXPOSE 5000
      • CMD [“python”, “app.py”]
    • 构建命令:docker build -t my-python-app:slim .
  • 构建要点:
    • 使用 .dockerignore 忽略 pycache.pyc.gitvenvnode_modules 等无关文件
    • 多阶段构建可用于分离构建依赖与运行环境(进阶)

三 运行与验证

  • 运行容器(示例映射 5000 端口):
    • 基于 CentOS 镜像:docker run -d --name py-centos -p 5000:5000 my-python-app:centos
    • 基于 python 镜像:docker run -d --name py-slim -p 5000:5000 my-python-app:slim
  • 验证:
    • 本地:curl http://localhost:5000
    • 远程:curl http://<服务器IP>:5000
  • 常用运维:
    • 查看日志:docker logs -f <容器名>
    • 进入容器:docker exec -it <容器名> bash
    • 停止/启动:docker stop/start <容器名>
  • 多服务编排(可选,使用 Docker Compose):
    • docker-compose.yml
      • version: “3.8”
      • services:
        • web:
          • build: .
          • ports: [“5000:5000”]
        • db:
          • image: postgres:15
          • environment:
            • POSTGRES_PASSWORD=example
    • 启动:docker-compose up -d;验证:curl http://localhost:5000

四 生产级优化与安全建议

  • 基础镜像与依赖
    • 优先选择 python:3.x-slimalpine;如需系统工具再按需安装,减少攻击面
    • 使用可信基础镜像与固定版本号(如 3.11.10-slim),避免浮动版本导致不可预期
  • 镜像与运行时安全
    • 非 root 运行:在 Dockerfile 中创建非特权用户并切换
      • RUN adduser -m -u 1001 app && chown -R 1001:1001 /app
      • USER 1001
    • 最小权限:仅暴露必要端口;使用 read-only 根文件系统(如可行);禁用调试接口
  • 构建与运行优化
    • 依赖分层缓存:先复制并安装 requirements.txt,再复制源码,提升构建命中率
    • 使用 .dockerignore;多阶段构建减小最终镜像体积
    • 资源限制:docker run 加入 --cpus、–memory 限制
  • 数据与配置
    • 配置与密钥通过 ConfigMap/Secret 或挂载卷注入,避免硬编码
    • 日志输出到 stdout/stderr,便于采集与轮转
  • 网络与合规
    • 仅开放必要端口;如需固定 IP 或自定义网段,使用 Docker 网络(生产谨慎评估)
    • 不建议直接在生产禁用 SELinux;如必须调整,遵循最小变更与回滚方案

0