构建镜像已经简单到docker build 或 buildkit build了,但优化镜像成了下一个问题。
Layer层数据是叠加的
容器镜像由多个Layer层数据组装而成,每一条命令结果都会以一个层存储并逐渐叠加。
以Python
镜像安装诸多包为例。
# py-pip1.dockerfile
FROM python
# 安装每个包都以RUN命令独立实现
RUN pip3 install flask -i https://mirrors.aliyun.com/pypi/simple
....
RUN pip3 cache purge
# py-pip2.dockerfile
FROM python
RUN <<EOF
# 安装每个包以EOF合并语法实现,即一条RUN
pip3 install flask -i https://mirrors.aliyun.com/pypi/simple
...
pip3 cache purge
EOF
# py-pip3.dockerfile
FROM python
COPY <<EOF /opt/requirement.txt
# 以EOF语法,由COPY命令将依赖包名写入到requirement.txt
flask
...
EOF
RUN <<EOF
pip3 install -r /opt/requirement.txt -i https://mirrors.aliyun.com/pypi/simple
pip3 cache purge
EOF
三个命令构建镜像结果如下:
可以见到第一个镜像体积比后者大。
这是因为容器镜像Layer层数据是叠加的,上层会遮蔽下层的数据,但不会减少数据。
建议:执行命令若有产生缓存的,则可以采取删除缓存的情况释放空间。
标签:Layer,RUN,pip3,python,py,构建,镜像,优化 From: https://www.cnblogs.com/yulinor/p/18145752