直接用 Docker 来启动你的 Python 项目

2024-06-17 11:24:21 浏览数 (1)

想象这样一种场景,你写好了代码,准备部署在新的服务器上,这台服务器只有 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 应用:

代码语言:javascript复制
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 文件中,根据你的需要调整:

代码语言:javascript复制
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、运行以下命令启动服务:

代码语言:javascript复制
docker-compose up -d

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

你可能会使用宿主机代理,指定容器的时区,对外暴露端口等,不希望每次都 pip install,那么可以这样编写 docker-compose.yml :

代码语言:javascript复制
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 内容如下:

代码语言:javascript复制
#!/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 脚本。非常方便。

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

0 人点赞