Docker多阶段构建Django

Docker多阶段构建Django,第1张

Docker多阶段构建Django

前言

        本小结主要结合实践,如何针对Docker镜像进行瘦身,通过其多阶段构建特性进行




一、前后对比 基本镜像说明大小Centos7单一构建1.02GBAlpine3单一构建678MBAlpine3多阶段构建312MB

二、环境 环境版本说明Docker19.03.1必须大于17.05,此后才支持多阶段构建Django3.1.10

三、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的多次构建,正式镜像体积缩减效果显著。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4678970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存