侧边栏壁纸
博主头像
码森林博主等级

一起走进码森林,享受编程的乐趣,发现科技的魅力,创造智能的未来!

  • 累计撰写 145 篇文章
  • 累计创建 73 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker(5):docker 镜像分层 layer

码森林
2022-02-24 / 0 评论 / 0 点赞 / 778 阅读 / 3,086 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文主要了解下 docker 镜像的分层结构。

镜像分层

镜像分层结构

如上图所示,docker 分层主要分为两大层,上层是“容器层”,下层是“镜像层”。

容器层可以读写,容器所有发生文件变更写都发生在这一层,容器自身内部完成,容器互相独立互不干扰。镜像层 read-only,只允许读取。

通过镜像构建时看分层

docker build -t zwqh.top/mywebapp:1.0 /usr/image/my-dockerfile
____________________________________________
Sending build context to Docker daemon  28.97MB
Step 1/4 : FROM tomcat:jdk8-corretto
 ---> 79b38376f3de
Step 2/4 : MAINTAINER zwqh.top
 ---> Running in 13c52044c758
Removing intermediate container 13c52044c758
 ---> 817712d51c7e
Step 3/4 : WORKDIR /usr/local/tomcat/webapps
 ---> Running in 6575a667ae48
Removing intermediate container 6575a667ae48
 ---> 65d94934c688
Step 4/4 : ADD docker-web ./docker-web
 ---> 80946ac76b0d
Successfully built 80946ac76b0d
Successfully tagged zwqh.top/mywebapp:1.0

从上面内容看执行的每一步都会生成一个临时镜像,临时镜像只用于镜像的构建,不能直接使用。

临时镜像可以看做是一种快照,每执行一步都会对当时系统环境进行一次快照,类似游戏的存档。

而每一步又类似叠汉堡,有层次~

分层的临时容器可重用

分层的临时容器是可重用的,如果不更换底层配置,只需构建不同的部分就可以了~

示例:

#进入镜像目录
cd /usr/image

#创建docker-layer目录
mkdir docker-layer

#进入docker-layer目录
cd /docker-layer

#编辑Dockerfile文件
vim Dockerfile

#基准镜像
FROM centos
#构建镜像时输出
RUN ["echo","aaaa"]
RUN ["echo","bbbb"]
RUN ["echo","cccc"]
RUN ["echo","dddd"]

:wq #保存

#构建镜像
docker build -t zwqh.top/docker-layer:1.0 /usr/image/docker-layer

#运行内容
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM centos
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
 ---> 300e315adb2f
Step 2/5 : RUN ["echo","aaaa"]
 ---> Running in 9e8f37427440
aaaa
Removing intermediate container 9e8f37427440
 ---> 090240f2c10b
Step 3/5 : RUN ["echo","bbbb"]
 ---> Running in c472cfecc059
bbbb
Removing intermediate container c472cfecc059
 ---> f06a8292da38
Step 4/5 : RUN ["echo","cccc"]
 ---> Running in a5865c336958
cccc
Removing intermediate container a5865c336958
 ---> cc49ab52eb9a
Step 5/5 : RUN ["echo","dddd"]
 ---> Running in 5838d16395b1
dddd
Removing intermediate container 5838d16395b1
 ---> 99549efe0556
Successfully built 99549efe0556
Successfully tagged zwqh.top/docker-layer:1.0


#修改Dockerfile文件
vim Dockerfile

#基准镜像
FROM centos
#构建镜像时输出
RUN ["echo","aaaa"]
RUN ["echo","bbbb"]
RUN ["echo","eeee"]
RUN ["echo","ffff"]

#再次构建镜像
docker build -t zwqh.top/docker-layer:1.1 /usr/image/docker-layer

#运行内容
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM centos
 ---> 300e315adb2f
Step 2/5 : RUN ["echo","aaaa"]
 ---> Using cache
 ---> 090240f2c10b
Step 3/5 : RUN ["echo","bbbb"]
 ---> Using cache
 ---> f06a8292da38
Step 4/5 : RUN ["echo","eeee"]
 ---> Running in 6ec0861d5b83
eeee
Removing intermediate container 6ec0861d5b83
 ---> e5f314de5417
Step 5/5 : RUN ["echo","ffff"]
 ---> Running in 249aef1aef8a
ffff
Removing intermediate container 249aef1aef8a
 ---> 12ce8a3e910b
Successfully built 12ce8a3e910b
Successfully tagged zwqh.top/docker-layer:1.1

可以看到第二次构建没有输出 aaaa、bbbb,再看 Using cache,说明临时镜像是重用的,这样可以减少步骤快速构建。

总结

本文主要学习了 docker 镜像分层,docker 内部构建过程及原理,后续章节将会对 Dockerfile 文件指令进行详细解析。

0

评论区