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

村望老弟發表於2021-11-28

使用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

相關文章