docker构建镜像并优化镜像的体积

一、 需求

  1. 编写一个 dockerfile 创建 docker 可以运行 yolov5+ paddle ocr
  2. docker 镜像需要尽可能的小

二、思路

  1. 两阶段构建,利用一个镜像进行各种复杂操作,不必在乎这个镜像的大小。但是要注意 conda 目录的大小,需要整理一下安装后的 conda 目录(比如删除缓存之类的)
  2. 利用conda-pack 可以略微减少一些体积大小,原理就是删除 conda 管理相关东西,但是保留需要的库

三、代码


# 第一阶段构建 image,此时不太在乎多的指令带来的无用的 layer,只要能完成 conda 和里面包的安装即可
FROM nvcr.io/nvidia/pytorch:21.10-py3 AS BUILD

# Install linux packages
RUN apt update && apt install -y zip htop screen libgl1-mesa-glx

# Install python dependencies
COPY requirements.txt .
RUN python -m pip install --upgrade pip paddlepaddle -i https://mirror.baidu.com/pypi/simple
RUN pip uninstall -y torch torchvision torchtext
RUN pip install --no-cache -r requirements.txt albumentations wandb gsutil notebook -i https://pypi.tuna.tsinghua.edu.cn/simple 
RUN pip install paddleocr>=2.0.1 -i https://mirror.baidu.com/pypi/simple
RUN pip3 install torch==1.11.0 torchvision==0.12.0 --extra-index-url https://download.pytorch.org/whl/cpu

# 利用 conda-pack 优化的小技巧,压缩再解压
RUN conda install conda-pack
RUN conda create --name baseclone --clone base
RUN conda-pack --version && conda-pack -n baseclone -o /tmp/env.tar && \
  mkdir /venv && cd /venv && tar xf /tmp/env.tar && \
  rm /tmp/env.tar


# -------------------------------------------------
# 第二阶段镜像构建,此时需要注意操作的次数,尽可能避免操作
FROM ubuntu:20.04 AS runtime

# “DEBIAN_FRONTEND=noninteractive” Avoiding user interaction when apt install 
ENV PATH=/opt/conda/bin:$PATH DEBIAN_FRONTEND=noninteractive

# Install libs used by opencv
RUN apt update && apt install --yes libgl1-mesa-glx libglib2.0-dev  && mkdir -p /opt/conda

# 核心在这里 , 从第一阶段的 image 里面 copy 出来需要的东西
COPY --from=build /venv /opt/conda

四、 总结

通过上面的两阶段操作,我们 最终获取的第二阶段的镜像是带有需要的 conda ,同时没有任何不必要的操作的干净的镜像

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值