找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5092

积分

0

好友

712

主题
发表于 5 小时前 | 查看: 3| 回复: 0

想象这样一个开发场景:你的代码已经写好了,正准备部署到一台新服务器上。但一检查,发现服务器上只有陈旧的 Python 2 和 Python 3.6,而你项目依赖的是最新的 Python 3.12。这时候该怎么办?

传统方法是编译安装新版本的 Python,但这个过程往往伴随着各种依赖缺失和编译错误,非常折腾。如果你执着于此,可以参考这篇关于避坑-编译安装 Python 时遇到无法构建 SSL的文章。

更优雅、更高效的方案是使用 Docker。它允许你无需构建自定义镜像就能直接运行项目,相当于随身携带了一个指定版本的完整 Python 运行环境。接下来,我们就分享两种直接使用 Docker 运行 Python 项目的方法:单命令模式和 Docker Compose 编排模式。

使用 Docker 单命令运行

这种方法最为直接,适合快速测试或执行一次性任务。

  1. 打开终端,进入你的 Python 项目根目录。
  2. 执行以下命令,将当前目录挂载到容器中并运行你的脚本:
docker run -it --rm -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp python:3.12-alpine python your_script.py

让我们拆解一下这个命令的每个部分:

  • -it:保持容器的标准输入打开,并分配一个伪终端,方便交互。
  • --rm:容器退出后自动删除,避免产生一堆无用的停止容器。
  • -v "$(pwd)":/usr/src/myapp:这是挂载卷的关键参数。它将宿主机的当前目录($(pwd))映射到容器内的 /usr/src/myapp 路径。
  • -w /usr/src/myapp:设置容器启动后的工作目录为 /usr/src/myapp
  • python:3.12-alpine:指定使用的 Docker 镜像。这里用了 Alpine 版本的 Python 3.12 镜像,体积小。你可以根据需要替换为其他官方标签,如 python:3.11, python:3.8-slim 等。
  • python your_script.py:容器启动后要执行的命令,即运行你的 Python 脚本。

使用 Docker Compose 运行

当你的项目需要更复杂的配置(如设置环境变量、映射多个端口)或未来可能引入其他服务(如数据库)时,使用 Docker Compose 是更规范、可维护性更高的选择。

  1. 在你的项目根目录下,创建一个 docker-compose.yml 文件。
  2. 编辑该文件,添加如下基础配置(可根据实际情况调整):
version: '3.8'
services:
  python-app:
    image: python:3.8
    volumes:
      - .:/usr/src/myapp
    working_dir: /usr/src/myapp
    command: python your_script.py
  • version: 指定 Compose 文件格式版本。
  • services.python-app: 定义了一个名为 python-app 的服务。
  • image: 指定服务使用的镜像。
  • volumes: 将宿主机当前目录挂载到容器内,实现代码同步。
  • working_dir: 设置容器内的工作目录。
  • command: 容器启动时执行的命令。
  1. 在包含 docker-compose.yml 文件的目录下,打开终端并运行:
docker-compose up -d

这个命令会根据 YAML 文件的配置启动服务。-d 参数表示在后台运行。

进阶配置示例

在实际项目中,你可能需要配置时区、使用宿主机代理、持久化依赖包等。下面是一个更贴近生产需求的 docker-compose.yml 示例:

version: '3.8'

services:
  auto_reserve:
    image: python:3.12-alpine
    container_name: auto_reserve
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - http_proxy=http://172.17.0.1:7890
      - https_proxy=http://172.17.0.1:7890
      - all_proxy=http://172.17.0.1:7890
    volumes:
      - .:/app
      - ./site-packages:/usr/local/lib/python3.12/site-packages
    working_dir: /app
    command: /app/init.sh

对应的初始化脚本 init.sh 内容如下:

#!/bin/sh
pip install --no-cache-dir -r requirements.txt
pytest
python startup.py

这个配置实现了:设置容器时区、配置网络代理、将 pip 安装的包持久化到宿主机 ./site-packages 目录(避免每次重启重装),并通过一个启动脚本顺序执行安装依赖、运行测试和启动主程序。

Docker Compose 常用命令速查

掌握以下命令,可以高效地管理你的 Compose 项目:

命令 描述
docker-compose up 构建、创建、启动并关联服务容器。
docker-compose down 停止并移除由 up 创建的容器、网络等。
docker-compose start/stop/restart 启动/停止/重启已存在的服务容器。
docker-compose build 构建或重新构建服务镜像。
docker-compose logs 查看服务容器的日志输出。
docker-compose exec 在运行中的服务容器内执行命令(如 docker-compose exec python-app bash)。
docker-compose ps 列出项目中所有容器的状态。
docker-compose run 在临时容器中运行一次性命令(常用于执行数据库迁移等)。

这些方法的核心思想都是利用官方镜像的纯净环境,通过卷挂载将你的项目代码“注入”容器中执行。它完美解决了环境不一致的痛点,无需在服务器上进行复杂的运维配置,极大地简化了部署流程。

希望这份指南能帮助你更顺畅地使用 Docker。如果你想深入探讨更多云原生或开发部署的话题,欢迎到 云栈社区 与其他开发者交流。




上一篇:我的实践:从手写代码到让Claude/OpenAI生成,再用‘进化论’挑选
下一篇:Docker容器运行时端口暴露:不重启容器新增映射的3种方法
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-9 08:23 , Processed in 0.624305 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表