Docker多阶段构建Django




前言

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





一、前后对比

基本镜像说明大小
Centos7单一构建1.02GB
Alpine3单一构建678MB
Alpine3多阶段构建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/uwsgi /usr/local/bin/uwsgi
ADD app.tar.gz /opt  # 引入程序代码
WORKDIR /opt/app
ENTRYPOINT ["sh", "./script/start_app.sh"]  # 启动应用




总结

        通过上述Dockerfile的多次构建,正式镜像体积缩减效果显著。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值