Docker 与 Python:容器化部署应用,实现快速发布与弹性伸缩
以下是一个简单的 Flask 应用
# app.py - 一个简单的Flask应用
from flask import Flask
import os
app = Flask(__name__)
@app.route("/")
def hello():
env = os.environ.get('FLASK_ENV', "local")
print('environ---', os.environ.get('FLASK_ENV', "local"))
return "Hello Docker World!" + f"env={env}"
@app.route("/health")
def health():
return {"status": "healthy"}
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
同目录下有个 requirements.txt 文件,项目依赖文件
Flask==2.3.3
gunicorn==21.2.0
接下来是 Dockerfile ,这是个构建容器的文件
# 选择基础镜像 -python 3.9 官方镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装 Python依赖
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 定义启动命令
CMD ["python", "app.py"]
# 也可以借助 gunicorn 替代 Flask 开发服务器
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
接下来构建镜像
# 构建Docker镜像
docker build -t my-python-app .
# 运行容器
docker run -p 5000:5000 my-python-app
然后访问我们的接口
http://123.57.31.157:5000/
http://123.57.31.157:5000/health
然后是 docker-compose.yml 方便本地开发
services:
web:
image: my-python-app:latest
ports:
- "5000:5000"
environment:
- FLASK_ENV=development