本文记录如何将一个 Python 应用 Docker 化。
一个自动轮询脚本
第一个例子是一个自动轮询的脚本。
目录结构
项目的目录结构如下:
1 | project/ |
Dockerfile:
1 | FROM python:3.9-slim |
Docker 操作
编译镜像
在项目根目录下运行:
1 | docker build -t IMAGE_NAME . |
导出镜像
将编译好的镜像导出成 tar 文件,方便导入群晖 NAS:
1 | docker save -o docker-image.tar IMAGE_NAME |
启动容器
1 | docker run --name CONTAINER_NAME -e ENV_VARIABLE_1="VALUE" -e ENV_VARIABLE_2="VALUE" IMAGE_NAME |
当然,某些容器需要端口映射:
1 | -p HOST_PORT:INSIDE_PORT |
使用 Alpine Linux 的坑
事实上并不推荐使用 Alpine Linux 作为基底镜像,因为 Alpine 不支持 PyPI 上已经编译好的 wheel 包,而是需要 pip install 时本地编译——比如 numpy 之类的含 C/C++ 包。
因此更推荐使用 python:3.9-slim
镜像作为基底镜像,避开 Alpine 的种种问题。