无需环境,直接用 Docker 来启动你的 Python 项目

大家好 我是洪峰

想象这样一种场景,你写好了代码,准备部署在新的服务器上,这台服务器只有 Python2 和 Python3.6,没有你代码适配好的 Python3.12,那怎么办?

1、编译安装 Python,我不推荐这种方法,安装过程中,各种缺失的依赖绝对让你抓狂,如果你就是要用这种方法,可以参考这篇避坑-编译安装 Python 时遇到无法构建 SSL

2、docker 或 docker compose,我强烈推荐这种方法,而且不构建自定义镜像就可以运行,相当于你有一个随时使用的 Python 环境。

接下来就来分享方法 2,你既可以直接使用 Docker 命令,也可以使用 Docker Compse。

使用 Docker 命令

1、打开终端或命令行界面。

2、cd 到 Python 项目目录。

3、运行以下命令,将你的项目目录挂载到容器中,并使用 Docker 运行你的 Python 应用:

docker run -it --rm -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp python:3.12-alpine python your_script.py
  • -it 选项使容器的标准输入保持打开,并分配一个伪终端。

  • --rm 选项告诉 Docker 在容器退出时自动删除它,避免留下无用的容器。

  • -v "$(pwd)":/usr/src/myapp 将当前目录(即你的 Python 项目目录)挂载到容器的 /usr/src/myapp目录。

  • -w /usr/src/myapp 设置工作目录为 /usr/src/myapp

  • python:3.12-alpine 是使用的 Docker 镜像,这里使用的是 Python python:3.12-alpine。你可以根据需要更换为其他版本,参考前文为 Python 项目选择合适的 Docker 镜像

  • python your_script.py 是容器启动后执行的命令,用于运行你的 Python 脚本。

     

如果你记不住 docker 中冒号(:)那边是宿主机,那边是容器,可以看前文:Docker 宿主机和容器的映射关系记忆技巧

使用 Docker Compose

1、在你的 Python 项目目录中创建一个 docker-compose.yml 文件。

2、添加以下内容到 docker-compose.yml 文件中,根据你的需要调整:

version: '3.8'
services:
  python-app:
    image: python:3.8
    volumes:
      - .:/usr/src/myapp
    working_dir: /usr/src/myapp
    command: python your_script.py
  • 这里定义了一个名为 python-app 的服务,使用 python:3.8 镜像。

  • volumes 配置将当前目录挂载到容器中的 /usr/src/myapp 目录,使容器可以访问你的项目文件。

  • working_dir 配置设置容器的工作目录为 /usr/src/myapp

  • command: python your_script.py 指定启动服务时要运行的命令。

1、在终端或命令行界面中,导航到包含 docker-compose.yml 文件的目录。

2、运行以下命令启动服务:

docker-compose up -d

这会根据 docker-compose.yml 文件中的配置启动一个容器,并运行指定的 Python 脚本。-d 表示后台运行。

你可能会使用宿主机代理,指定容器的时区,对外暴露端口等,不希望每次都 pip install,那么可以这样编写 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

使用 Docker Compose 运行项目的好处是,你可以轻松地配置和启动多个相关服务,使用 Compose,你可以通过 YAML 文件来配置应用服务,然后使用一条命令,就能创建并启动所有的服务。以下是一些 Docker Compose 的常用命令:

命令描述
docker-compose up构建、(重新)创建、启动和附加到服务的容器。如果服务已经在运行,up 命令会更新配置并重新启动服务。
docker-compose down停止并移除由 docker-compose up 命令所启动的容器、网络、卷和默认网络。
docker-compose start启动已经存在的服务容器。
docker-compose stop停止已经运行的容器但不移除它们。可以随后使用 docker-compose start 来再次启动容器。
docker-compose restart重启容器。
docker-compose build构建或者重新构建服务中定义的镜像。
docker-compose pull拉取服务依赖的 docker 镜像。
docker-compose push将服务中的镜像推送到 Docker Hub 或其他镜像仓库中。
docker-compose logs查看服务容器的日志输出。
docker-compose exec在服务的容器内执行命令。例如,docker-compose exec web bash 会在名为 web 的服务的容器中启动 bash 会话。
docker-compose run在临时服务容器中运行一次性命令。例如,docker-compose run web python manage.py migrate 可以用于运行 Django 迁移。
docker-compose config验证并且查看配置的服务的配置文件。
docker-compose ps列出在配置文件中定义的所有容器,并显示其运行状态。
docker-compose rm删除所有(停止状态的)服务容器。可以通过 docker-compose down 来达到相同的效果,但 down 命令还会删除网络和卷。

这些命令为 Docker Compose 的常用工具集,覆盖了从构建镜像、容器的启动和停止、到查看日志和执行服务内部命令等常见操作。通过熟悉这些命令,可以有效地管理和维护多容器的 Docker 环境。

以上是两种不构建自定义镜像而直接使用 Docker 或 Docker Compose 运行 Python 项目的方法。简单来说,这些方法通过使用官方 Python 镜像并将你的项目目录挂载到容器内部,允许你在容器环境中执行 Python 脚本。非常方便。

如果有帮助,欢迎点赞关注、转发、支持。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值