在本文中,我们将探讨如何利用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代码。