通过RUN执行指令
原创大约 2 分钟
RUN
主要用于在镜像里执行指令,比如安装软件,下载文件等。
如果想在Docker中执行如下命令。
> yum update
> yum install 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
换成Dockerfile
的话,就是如下指令。
FROM centos
RUN yum update
RUN yum 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
在Dockerfile
中每执行一个指令或语法,都会在镜像中生成一层。所以上面的6个RUN指令,就会在镜像中生成6层,造成镜像体积较大。
例如,执行构建命令。
> docker build -t ipinfo .
查看构建完成的镜像。
> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ipinfo latest 97bb429363fb 4 minutes ago 138MB
centos 7.9 478aa0080b60 4 days ago 74.1MB
再执行下面的命令,就可以看到各个不同的层
。
> docker image history 97bb429363fb
IMAGE CREATED CREATED BY SIZE COMMENT
97bb429363fb 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 yum install -y wget # bui… 7.58MB buildkit.dockerfile.v0
<missing> 4 minutes ago RUN /bin/sh -c yum update # buildkit 33MB buildkit.dockerfile.v0
因此,推荐把命令放在一个RUN
指令中完成,改进后的Dockerfile
如下。
FROM centos
RUN yum update && \
yum 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 build -t ipinfo-new .
再次查看镜像列表。
> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ipinfo-new latest fe551bc26b92 5 seconds ago 124MB
ipinfo latest 97bb429363fb 16 minutes ago 138MB
ubuntu 21.04 478aa0080b60 4 days ago 74.1MB
查看ipinfo-new
镜像的历史信息。
> docker image history fe551bc26b92
IMAGE CREATED CREATED BY SIZE COMMENT
fe551bc26b92 16 seconds ago RUN /bin/sh -c yum update && yum… 49.9MB buildkit.dockerfile.v0
可以看到,通过Dockerfile
的包装
,ipinfo-new
镜像的体积明显小了一些。
感谢支持
更多内容,请移步《超级个体》。