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 :)

总结

精简的思路就是使用最小的根镜像,然后按需安装必要的依赖,最后清理掉临时没用的文件

上一篇下一篇

猜你喜欢

热点阅读