为 Python Web Apps 写 Dockerfile
本文介绍了如何为 Python Apps 写 Dcokerfile,并应用这个文件构建适用于不同 Stage 的镜像。
- 开发环境使用 debian 作为 base image, 生产环境使用 alpine 作为 base image
- Gunicorn 在 dev 模式中开启 hot reloading
- 静态资源经过 bundle 以后,使用 flask static / template folders 提供
- 使用 multi-stage alpine build 减小最终部署到生产环境的镜像大小
一些 Tricks:
- Dockerfile 中
COPY src /app
, 运行的时候,在 dev mode,docker run -v $(pwd):/app
可以挂载最新的代码进去,在 prod mode,不需要挂载最新的代码,就按照 CI 编好的代码运行即可。 - .dockerignore 文件中把 .git,
__pycache__
等文件去掉。 - 使用多个
FROM ... AS ...
可以有效减小镜像的大小,特别是在需要编译一些 C 依赖的时候。