为 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 依赖的时候。