前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >直接用 Docker 来启动你的 Python 项目

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

作者头像
somenzz
发布2024-06-17 11:24:21
3390
发布2024-06-17 11:24:21
举报
文章被收录于专栏:Python七号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 应用:

代码语言: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 脚本。非常方便。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Docker 命令
  • 使用 Docker Compose
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档