想象这样一种场景,你写好了代码,准备部署在新的服务器上,这台服务器只有 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
文件中,根据你的需要调整:
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
表示后台运行。
代码语言:javascript复制你可能会使用宿主机代理,指定容器的时区,对外暴露端口等,不希望每次都 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
代码语言:javascript复制其中 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 脚本。非常方便。
如果有帮助,欢迎点赞关注、转发、支持。