本文涵盖了从创建简单的 Dockerfile 到生产环境多级构建 Python 应用的例子。以下为本指南的内容摘要:
- 使用合适的基础镜像(开发环境使用 debian,生产环境使用 alpine)。
- 在开发时使用
gunicorn
进行热加载。
- 优化 Docker 的 cache layer(缓存层)—— 按照正确的顺序使用命令,仅在必要时运行
pip install
。
- 使用
flask
的 static 及 template 目录部署静态文件(比如 React、Vue、Angular 生成的 bundle)。
- 使用
alpine
进行生产环境下的多级构建,减少最终镜像文件的大小。
- #彩蛋 — 在开发时可以用 gunicorn 的
--reload
与 --reload_extra_files
监视文件(包括 html、css 及 js)的修改。
内容
- 简单的 Dockerfile 与 .dockerignore
- 使用 gunicorn 实现热加载
- 运行一个单文件 python 脚本
- 部署静态文件
- 生产环境中的直接构建
- 生产环境中的多级构建
假设我们有一个名为 python-app 的应用,为其准备一个简单的目录结构。在顶级目录下,包含 Dockerfile
以及 src
文件夹。
python app 的源码就存放在 src
目录中,app 的依赖关系保存在 requirements.txt
里。为了简洁起见,我们假设 server.py 定义了一个运行于 8080 端口的 flask 服务。
python-app
├── Dockerfile
└── src
└── server.py
└── requirements.txt
1. 简单的 Dockerfile 样例
FROM python:3.6
# 创建 app 目录
WORKDIR /app
# 安装 app 依赖
COPY src/requirements.txt ./
RUN pip install -r requirements.txt
# 打包 app 源码
COPY src /app
EXPOSE 8080
CMD [ "python", "server.py" ]
<