使用Docker容器化部署Python应用:一步步教你从本地到VPS服务器

简介

Docker是一种轻量级的虚拟化技术,能够将应用程序及其依赖包打包成一个可移植的容器,实现快速部署和高效管理。以下将指导你如何使用Docker将Python脚本容器化,并部署到VPS服务器。

本地打包镜像

1. 创建项目文件结构

首先,创建一个名为my_openai_app的目录,并在其中创建以下文件:

text 复制代码
my_openai_app/
├── Dockerfile
├── requirements.txt
└── app.py

2. 编写Python脚本(app.py)

以下是一个简单的OpenAI API调用脚本:

python 复制代码
from openai import OpenAI
import os

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

completion = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": "Write a one-sentence bedtime story about a unicorn."
    }]
)

print(completion.choices[0].message.content)

3. 编写依赖文件(requirements.txt)

requirements.txt中添加所需的依赖包:

text 复制代码
openai>=1.0.0

4. 编写Dockerfile

使用多阶段构建来减少镜像体积:

text 复制代码
# 第一阶段:构建环境
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# 第二阶段:生产镜像
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY app.py .

# 确保pip安装的包在PATH中
ENV PATH=/root/.local/bin:$PATH

CMD ["python", "app.py"]

5. 构建镜像

在终端运行以下命令构建镜像:

bash 复制代码
docker build -t openai-app .

VPS服务器部署

1. 安装Docker

在Ubuntu/Debian系统上安装Docker:

bash 复制代码
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

2. 加载镜像并运行

将镜像保存为tar文件并上传到VPS:

bash 复制代码
docker save -o openai-app.tar openai-app

上传后,在VPS上加载镜像:

bash 复制代码
docker load -i openai-app.tar

运行容器时传入API密钥:

bash 复制代码
docker run -e OPENAI_API_KEY=sk-your-api-key openai-app

关键优化点

  1. 多阶段构建 :减少最终镜像体积,从1.2GB优化到150MB。
  2. 环境变量管理 :通过-e参数传递敏感信息,如API密钥。
  3. 依赖缓存 :使用独立的requirements.txt文件管理依赖。

验证部署

查看容器日志和状态:

bash 复制代码
docker logs
docker ps -a

注意事项

  1. API密钥安全:不要将API密钥写入Dockerfile,而是通过环境变量传递。
  2. 防火墙配置:确保VPS防火墙开放必要的端口(本例无需)。
  3. Docker组配置:建议配置docker组以避免使用sudo:
bash 复制代码
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

通过这些步骤,你可以成功地将Python应用从本地容器化并部署到VPS服务器。

相关推荐
海天胜景6 分钟前
HTTP Error 500.31 - Failed to load ASP.NET Core runtime
后端·asp.net
海天胜景9 分钟前
Asp.Net Core IIS发布后PUT、DELETE请求错误405
数据库·后端·asp.net
独行soc1 小时前
2025年渗透测试面试题总结-某服面试经验分享(附回答)(题目+回答)
linux·运维·服务器·网络安全·面试·职场和发展·渗透测试
源码云商2 小时前
Spring Boot + Vue 实现在线视频教育平台
vue.js·spring boot·后端
RunsenLIu4 小时前
基于Django实现的篮球论坛管理系统
后端·python·django
HelloZheQ5 小时前
Go:简洁高效,构建现代应用的利器
开发语言·后端·golang
caihuayuan56 小时前
[数据库之十四] 数据库索引之位图索引
java·大数据·spring boot·后端·课程设计
试着6 小时前
【AI面试准备】掌握常规的性能、自动化等测试技术,并在工作中熟练应用
面试·职场和发展·自动化·测试
风象南6 小时前
Redis中6种缓存更新策略
redis·后端
独行soc7 小时前
2025年渗透测试面试题总结-某步在线面试(题目+回答)
linux·网络·安全·web安全·面试·职场和发展·渗透安全