Dockerfile小记之使用RUN命令需要注意

使用RUN命令需要注意

避免多条RUN的情况

因为RUN 会在现有的基础上新添一层layer,创建一个新的image,所以需要在容器内执行多条shell命令尽量使用&&\连接,这样就只会创建一次layer

dockerfile错误案例:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y wget
RUN wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gz
RUN tar zxf ipinfo_2.0.1_linux_amd64.tar.gz
RUN mv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinfo
RUN rm -rf ipinfo_2.0.1_linux_amd64.tar.gz

image-20211127232437688

这样写的问题是,镜像的分层会变的很多,每一个RUN都是一个分层,打出来的镜像包也会变大。

修改后的正确写法

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install -y wget && \
    wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gz && \
    tar zxf ipinfo_2.0.1_linux_amd64.tar.gz && \
    mv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinfo && \
    rm -rf ipinfo_2.0.1_linux_amd64.tar.gz

image-20211127232750315

这时候再用docker image histroy <Image ID> 查看分层,就会看到分层少了很多。

这样所有的RUN命令只生成一层image layer。打包出来的镜像也没有那么大了

image-20211127232901467

本作品采用《CC 协议》,转载必须注明作者和本文链接
CunWang@Ch
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!