RUN 主要用于在Image里执行指令,比如安装软件,下载文件等
apt-get updateapt-get install wgetwget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gztar zxf ipinfo_2.0.1_linux_amd64.tar.gzmv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinform -rf ipinfo_2.0.1_linux_amd64.tar.gz
Dockerfile
FROM ubuntu:20.04RUN apt-get updateRUN apt-get install -y wgetRUN wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gzRUN tar zxf ipinfo_2.0.1_linux_amd64.tar.gzRUN mv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinfoRUN rm -rf ipinfo_2.0.1_linux_amd64.tar.gz
镜像的大小和分层
$ docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEipinfo latest 97bb429363fb 4 minutes ago 138MBubuntu 21.04 478aa0080b60 4 days ago 74.1MB$ docker image history 97bIMAGE CREATED CREATED BY SIZE COMMENT97bb429363fb 4 minutes ago RUN /bin/sh -c rm -rf ipinfo_2.0.1_linux_amd… 0B buildkit.dockerfile.v0<missing> 4 minutes ago RUN /bin/sh -c mv ipinfo_2.0.1_linux_amd64 /… 9.36MB buildkit.dockerfile.v0<missing> 4 minutes ago RUN /bin/sh -c tar zxf ipinfo_2.0.1_linux_am… 9.36MB buildkit.dockerfile.v0<missing> 4 minutes ago RUN /bin/sh -c wget https://github.com/ipinf… 4.85MB buildkit.dockerfile.v0<missing> 4 minutes ago RUN /bin/sh -c apt-get install -y wget # bui… 7.58MB buildkit.dockerfile.v0<missing> 4 minutes ago RUN /bin/sh -c apt-get update # buildkit 33MB buildkit.dockerfile.v0<missing> 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B<missing> 4 days ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B<missing> 4 days ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 0B<missing> 4 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B<missing> 4 days ago /bin/sh -c #(nop) ADD file:d6b6ba642344138dc… 74.1MB
每一行的RUN命令都会产生一层image layer, 导致镜像的臃肿。
改进版Dockerfile
FROM ubuntu:20.04RUN 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 lsREPOSITORY TAG IMAGE ID CREATED SIZEipinfo-new latest fe551bc26b92 5 seconds ago 124MBipinfo latest 97bb429363fb 16 minutes ago 138MBubuntu 21.04 478aa0080b60 4 days ago 74.1MB$ docker image history fe5IMAGE CREATED CREATED BY SIZE COMMENTfe551bc26b92 16 seconds ago RUN /bin/sh -c apt-get update && apt-get… 49.9MB buildkit.dockerfile.v0<missing> 4 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B<missing> 4 days ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B<missing> 4 days ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 0B<missing> 4 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B<missing> 4 days ago /bin/sh -c #(nop) ADD file:d6b6ba642344138dc… 74.1MB$