Python Dockerfile example
直入正题,示例 dockerfile 如下
FROM python:3.9.2-slim as build
# 如果有大文件的话,建议先用 .dockerignore 忽略
COPY . /app/
WORKDIR /app
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
FROM gcr.io/distroless/python3
COPY --from=build /app /app
COPY --from=build /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
ENV PYTHONPATH=/usr/local/lib/python3.9/site-packages
WORKDIR /app
EXPOSE 6000
ENV TZ="Asia/Shanghai"
CMD ["-u","jira.py"]
这里有几个注意点
- 最开始
Python
的版本为什么是3.9.2
?因为我们最后运行的Python
的版本是3.9.2
- 注意这里使用了两阶段 build,至于为什么使用
distroless
的镜像,请参考Google distroless image - 为什么是把
site-packages
移动走,是收到了此博文的启发 - 为什么加了
-u
,见此处GitHub issue。因为我们在 jira.py 中使用了print
,但是实际没有打印。
镜像大小
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1 40a9210e6c66 2 hours ago 68.6MB
python 3.9.2-slim 972ef8de24a4 11 months ago 114MB
gcr.io/distroless/python3 latest 92f9e40d3e5a 52 years ago 54.2MB
这里的 test:1
就是我们 build 的镜像,可以看到镜像体积比直接使用 python
的 slim 镜像少了不少。