使用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
這樣寫的問題是,映象的分層會變的很多,每一個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
這時候再用docker image histroy <Image ID>
檢視分層,就會看到分層少了很多。
這樣所有的RUN命令只生成一層image layer
。打包出來的映象也沒有那麼大了
本作品採用《CC 協議》,轉載必須註明作者和本文連結