前言
本小结主要结合实践,如何针对Docker镜像进行瘦身,通过其多阶段构建特性进行
一、前后对比
二、环境
三、Dockerfile
以下是最后的Dockerfile,可以看到一共有三个阶段:
(1)阶段一:通过选用的python:3.7.4-alpine3.10作为基础镜像,在此阶段构建必要编译环境等
(2)阶段二:FROM base as Build,依赖上述镜像,在此阶段构建应用需要的环境(python安装包),其他应用同理
(3)阶段三:正式镜像,通过COPY --from=Build /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.7/site-packages等 *** 作,将阶段二已构建好的包,复制至正式镜像中,应用启动并不关心安装依赖包等过程
FROM python:3.7.4-alpine3.10 as base # 1. 基础镜像 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache build-base vim gcc linux-headers libffi-dev mariadb-connector-c-dev FROM base as Build # 2. 安装依赖 ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1 COPY requirements.txt /tmp RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install --no-cache-dir -r /tmp/requirements.txt -i https://pypi.douban.com/simple FROM python:3.7.4-alpine3.10 # 3. 正式镜像 ENV TZ=Asia/Shanghai RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk --no-cache add tzdata mariadb-connector-c-dev && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && rm -rf /var/cache/apk/* COPY --from=Build /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.7/site-packages COPY --from=Build /usr/local/bin/daphne /usr/local/bin/daphne ADD app.tar.gz /opt # 引入程序代码 WORKDIR /opt/app ENTRYPOINT ["sh", "./script/start_app.sh"] # 启动应用
总结
通过上述Dockerfile的多次构建,正式镜像体积缩减效果显著。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)