哪些命令是build(构建镜像)的时候执行的?只会执行一次,比如COPY/RUN。
哪些命令是run(启动容器)的时候执行的?每次run都会执行,比如CMD(用于启动服务程序)。
TODO:总结一下
TODO
构建的时候,需要区分CPU架构吗?
如何唯一标识一个镜像?
# 常用的构建命令 # 使用 -t 指定镜像的 name:tag,一定要养成写 tag 的好习惯! docker build -t dj:1.0.0 .
Docker 每条指令都会生成一层(layer),但镜像体积取决于每层引入/保留下来的文件数据,而不是层数本身。把命令拆开并不会“自动让镜像变大”;真正让镜像变大的,是在较早的层里写入了临时文件或缓存,然后在后续层才删除:这些被删除的文件仍然占据镜像空间(它们只是被“遮蔽”,没有真的消失)。
RUN/COPY/ADD 会创建新层;ENV/WORKDIR 这类大多只是元数据,几乎不增加体积。
同一层里创建并清理临时文件才能避免膨胀。
# 反例(更胖):
RUN apt-get update
RUN apt-get install -y build-essential
RUN rm -rf /var/lib/apt/lists/*
# 正例(更瘦):
# 因为“清理缓存”发生在同一层里。
RUN apt-get update \
&& apt-get install -y --no-install-recommends build-essential \
&& rm -rf /var/lib/apt/lists/*