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
这样写的问题是,镜像的分层会变的很多,每一个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 协议》,转载必须注明作者和本文链接