Docker Notes
T

通过 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.Dockerfileipinfo.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 查看镜像分层情况。

dockerfile-run

Show Graph Visualisation