Python Docker 最小化镜像
2019-03-12 本文已影响0人
UULU
对比下 Python Docker 官方镜像,alpine 是最小的版本
$ docker images | grep python
python 3.7-alpine bb1ccaa5880c 4 days ago 86.7MB
python 3.7-stretch 32260605cf7a 7 days ago 929MB
python 3.7.2-slim-stretch e0d20fa24f01 7 days ago 143MB
python 3.7 ad01f54ca3a9 2 months ago 923MB
我的项目中用到了 mysqlclient 包里的 MySQLdb 库,需要安装一些环境依赖
PIP 配置文件
requirements.txt
mysqlclient
Docker 配置文件
Dockerfile
FROM python:3.7-alpine
COPY requirements.txt /requirements.txt
# 安装精简的mariadb依赖库
RUN apk --no-cache add mariadb-connector-c-dev
# 安装 mysqlclient 的依赖环境到临时的虚拟包
# 用pip安装 mysqlclient 到python库
# 删除缓存文件和虚拟包
RUN apk --no-cache add --virtual .build-deps \
build-base \
mariadb-dev \
&& pip install -r /requirements.txt \
&& rm -rf .cache/pip \
&& apk del .build-deps
ENV app /app
WORKDIR ${app}
ADD . $app
# 自己的部分
CMD ["python3", "main.py"]
编译镜像
$ docker build -t platform-scripts .
...
$ docker images
platform-scripts latest 00eaafb082b4 11 seconds ago 115MB
这种方式打包出来的镜像只有 115MB :)
总结
精简的思路就是使用最小的根镜像,然后按需安装必要的依赖,最后清理掉临时没用的文件