视频加载失败

Docker 镜像的分层与构建

403 字
2 分钟
Docker 镜像的分层与构建

🧱 镜像(Image)#

  • 是一个 只读模板,包含了运行应用所需的一切:操作系统、程序代码、依赖、配置等。
  • 它就像一份快照,可以重复使用。
  • 构建一次,可以启动很多个容器。

Docker 镜像是由多层构成的,每一层通常是只读的。这些层通过 UnionFS (联合文件系统) 组合在一起形成一个完整的文件系统,最终在容器运行时添加一个最上面的 可写层(writeable layer)。

如果你改变了 Dockerfile 中的一层指令(如 RUN、COPY、ADD),那么它之后的所有层都会重新构建。这是 Docker 的构建缓存(build cache)机制所决定的。

如果多个命令都指向同一个目的,那么应该用一个run来进行,而不是叠加多层

用一个RUN:

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

docker build 各种用法#

从dockerfile#

Terminal window
sudo docker build -f microservice.Dockerfile -t docker-jar .
Terminal window
sudo docker build -t minecraft-modpack-server .

从标准输入#

Terminal window
cat Dockerfile | docker build -

从Git repo#

Terminal window
docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14

Docker 指令

删除镜像#

Terminal window
# 删除单个镜像(可以用镜像名:tag 或镜像 ID)
docker rmi nginx:latest
# 强制删除(即使有基于它的容器存在)
docker rmi -f <image-id>
# 清理所有悬空镜像(dangling,即没有 tag 引用的中间层)
docker image prune
# 清理所有未被任何容器使用的镜像
docker image prune -a

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Docker 镜像的分层与构建
https://blog.81vm3.xyz/posts/docker-image/
作者
Blume
发布于
2026-01-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录