通过 RUN 执行指令
RUN 主要用于在 Image 里执行指令,比如安装软件,下载文件等。
$ apt update
$ apt install wget
$ wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.7.0/ipinfo_2.7.0_linux_amd64.tar.gz
$ tar -xvf ipinfo_2.7.0_linux_amd64.tar.gz
$ mv ipinfo_2.7.0_linux_amd64 /usr/local/bin/ipinfo
$ rm -rf ipinfo_2.7.0_linux_amd64.tar.gz
Dockerfile文件每一行的 RUN 命令都会产生一层 image layer, 过多的 RUN 命令会导致镜像的臃肿。
比如当前目录下有两个 Dockerfile 文件,ipinfo.new.Dockerfile 将 ipinfo.old.Dockerfile 文件中所有的 RUN 命令全部合并为一行,然后根据 Dockerfile 构建镜像。
# ipinfo.old.Dockerfile
FROM alpine:3.15.0
RUN apk add --no-cache wget
RUN wget -q https://ghproxy.com/https://github.com/ipinfo/cli/releases/download/ipinfo-2.7.0/ipinfo_2.7.0_linux_amd64.tar.gz
RUN tar -xvf ipinfo_2.7.0_linux_amd64.tar.gz
RUN mv ipinfo_2.7.0_linux_amd64 /usr/local/bin/ipinfo
RUN rm -rf ipinfo_2.7.0_linux_amd64.tar.gz
# ipinfo.new.Dockerfile
FROM alpine:3.15.0
RUN apk add --no-cache wget && \
wget -q https://ghproxy.com/https://github.com/ipinfo/cli/releases/download/ipinfo-2.7.0/ipinfo_2.7.0_linux_amd64.tar.gz && \
tar -xvf ipinfo_2.7.0_linux_amd64.tar.gz && \
mv ipinfo_2.7.0_linux_amd64 /usr/local/bin/ipinfo && \
rm -rf ipinfo_2.7.0_linux_amd64.tar.gz- 使用
docker image ls查看镜像大小:合并RUN命令的镜像体积小。 - 使用
docker image history查看镜像分层情况。

Backlinks
Docker Notes
- 通过 RUN 执行指令 [[run-cmd]]