在本文中,我们将探讨如何利用Docker Compose和Dockerfile自动部署本地的Python代码。

这种方法允许我们轻松地指定所需的依赖关系和环境配置,同时保留代码的本地修改。我们将通过一个简单的示例来展示这个过程,该示例包括一个使用Flask框架的基本Web应用程序。

准备工作

首先,我们需要准备以下文件和目录结构:

  • 一个名为docker-compose.yml的Docker Compose配置文件
  • 一个名为env-python的目录,其中包含我们的Dockerfile
  • 一个名为chatgpt的目录,其中包含我们的Python代码和依赖项文件requirements.txt

配置Docker Compose

我们的docker-compose.yml文件如下所示:

version: '3'
services:
  web_app1:
    build: ./env-python
    ports:
      - "15001:5000"
    volumes:
      - ./chatgpt:/app/app

在此配置中,我们定义了一个名为web_app1的服务,该服务将构建在env-python目录中的Dockerfile的基础上。我们还映射了端口15001到容器的端口5000,并通过volumes指令将本地chatgpt目录挂载到容器的/app/app目录。

创建Dockerfile

接下来,我们在env-python目录中创建一个Dockerfile,以指定Python环境的构建方法:

# 使用官方的Python镜像作为基础镜像
FROM python:3.8-slim-buster

# 将工作目录设置为/app
WORKDIR /app

# 设置 Flask 环境变量以启用自动重载
ENV FLASK_ENV=development

# 复制启动脚本到/app
COPY start.sh /app/start.sh

# 使脚本可执行
RUN chmod +x /app/start.sh

# 指定要运行的命令
CMD ["/app/start.sh"]

在这个Dockerfile中,我们使用官方的python:3.8-slim-buster镜像作为基础,设置了工作目录,并配置了Flask以在开发模式下运行,以便在我们修改本地文件时自动重新加载应用程序。

创建启动脚本

最后,我们创建一个名为start.sh的启动脚本,该脚本将检查是否存在requirements.txt文件,如果存在,它将安装所有必需的依赖项,然后启动我们的应用程序:

#!/bin/sh

# 检查是否存在 requirements.txt 文件
if [ -f "app/requirements.txt" ]; then
    # 安装依赖
    pip install --no-cache-dir -r app/requirements.txt
fi

# 启动应用程序
exec python app/app.py

现在,我们已经准备好了所有必要的文件和配置。只需运行docker-compose up --build命令,Docker Compose将构建我们的Python环境,安装任何必需的依赖项,并启动我们的应用程序。这种方法为我们提供了一种灵活、可重复和可自动化的方式来部署和运行Python代码。