下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
背景介绍
《【Docker】专题三:Dockerfile 相关》中提到,Dockerfile 中的部分指令(如 RUN、COPY、ADD)在构建 Docker 镜像时会增加镜像的层数。
行者Sun,公众号:实施运维知识交流【Docker】专题三:Dockerfile 相关
本文将以 RUN 指令为例,进一步演示和分析其对 Docker 镜像层数的影响效果。
演示过程
Dockerfile-1 文件内容如下
# 指定基础镜像
FROM alpine
# 指定 RUN 指令(两条命令,分别实现创建文件、删除文件)
RUN echo "This is demo_content" > /tmp/1.txt
RUN rm -rf /tmp/1.txt
构建 Docker 镜像
docker build -t alpine:demo-1 -f Dockerfile-1 .
查看 Docker 镜像分层信息
docker history alpine:demo-1 --no-trunc
查看 Docker 镜像分层信息 如图,该镜像有三个 layer 分层 第一个分层:表示基础镜像 第二个分层:对应第一条 RUN 指令,我们记录该镜像分层的 ID 第三个分层:对应第二条 RUN 指令
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive"
dive alpine:demo-1
查看 Docker 镜像分层文件
# 将 Docker 镜像保存为 tar 文件
docker save alpine:demo-1 -o demo-1.tar
# 查看 tar 文件内容
tar -xf demo-1.tar
cd 0e5986017b9df1a7163da7e70a44e72d951ddfebaf2b157eddcf00439bc76ebb
tar -xf layer.tar
cat tmp/1.txt
Dockerfile-2 文件内容如下
# 指定基础镜像
FROM alpine
# 指定 RUN 指令(一条命令,实现创建文件、删除文件)
RUN echo "This is demo_content" > /tmp/1.txt && rm -rf /tmp/1.txt
构建 Docker 镜像
docker build -t alpine:demo-2 -f Dockerfile-2 .
查看 Docker 镜像分层信息
docker history alpine:demo-2 --no-trunc
查看 Docker 镜像分层信息
如图,该镜像有两个 layer 分层
第一个分层:表示基础镜像
第二个分层:对应 RUN 指令,我们记录该镜像分层的 ID
alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive"
dive alpine:demo-2
查看 Docker 镜像分层文件
# 将 Docker 镜像保存为 tar 文件
docker save alpine:demo-2 -o demo-2.tar
# 查看 tar 文件内容
tar -xf demo-2.tar
cd 29baf2909e7a6a240ac1bb6e4bccd581a112a4a7e364a7f2b1f556fb0f652387
tar -xf layer.tar
cat tmp/1.txt
写在最后
书籍推荐
最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。