持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
回归到镜像本身,我们使用docker inspect [镜像 ID]来查看镜像属性。
[root@master ~]# docker inspect 74b0086fe7c6
......
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/990ec90661e0868c1fda29618916e4c5e3143a61394055de6e3f1333de9453fe/diff:/var/lib/docker/overlay2/69c24a49f77b361d64ddf7ce24051acee85d44cf27a62affee17203b9eb82d94/diff",
"MergedDir": "/var/lib/docker/overlay2/d6f217c3a337c34b5189700a3f94e521b6bde6b0309119f62abe1b51efb024be/merged",
"UpperDir": "/var/lib/docker/overlay2/d6f217c3a337c34b5189700a3f94e521b6bde6b0309119f62abe1b51efb024be/diff",
"WorkDir": "/var/lib/docker/overlay2/d6f217c3a337c34b5189700a3f94e521b6bde6b0309119f62abe1b51efb024be/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:4fc242d58285699eca05db3cc7c7122a2b8e014d9481f323bd9277baacfa0628",
"sha256:38413451f0dea7413dfa86b80c259d3e2aa3ac35c64982c5a0df1d5e2901477f",
"sha256:499f9544bfdd5dcddab710c6fbbcc3915731ac3f1fe2e338e7217be7a6bd4737"
]
},
......
其中有几个重点属性需要关注一下。
-
RootFS属性,layers就是代表镜像的层级,其中有三层(三条数据)
再使用
docker history分析一下镜像的结构[root@master ~]# docker history 74b0086fe7c6 --no-trunc=true IMAGE CREATED CREATED BY SIZE COMMENT sha256:74b0086fe7c6316790a203895e879d387d00d7f733af9060dd9ff1058c39a068 6 days ago /bin/sh -c #(nop) CMD ["./demo-gin"] 0B <missing> 6 days ago /bin/sh -c #(nop) COPY file:cd53aab436246ffa2e579600132d18c644f289099eced8fe82b285be3861eec9 in /app/demo-gin 9.19MB <missing> 6 days ago /bin/sh -c #(nop) WORKDIR /app 0B <missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:5d6753d25da3a14ce1f6cf66e4c7fd4f4b85a3759a9d93efb3fd9ff852b5b56e4 in / 5.57MB或者你在pull镜像的时候留意一下
[root@master ~]# docker pull lomtom/demo-gin Using default tag: latest latest: Pulling from lomtom/demo-gin df9b9388f04a: Pull complete 2f0488c48942: Pull complete 06e8ee5ba102: Pull complete Digest: sha256:3ea098ee7ec35c266092f94e5c90e1edceb64d91863c2533fc5869eb8c319581 Status: Downloaded newer image for lomtom/demo-gin:latest docker.io/lomtom/demo-gin:latest不难发现,执行
docker history之后,根据日期6 days ago,就能知道这三层就是我们自定义的dockerfile生成的三层。那么 2 weeks ago 的两层是哪里来的呢?
去查看使用的基础镜像,不难发现他的最新更新恰好就是两周前。
那么,这三层是怎么和Dockerfile对应的呢。
会看我们真实用到的dockerfile文件
FROM alpine WORKDIR /app COPY --from=builder /app/demo-gin /app/demo-gin CMD ["./demo-gin"]- FROM选取基础镜像,也就是
FROM alpine,构成了层级的第一层和第二层。 WORKDIR /app对应了第三层,以及他的CREATE BY为/bin/sh -c #(nop) WORKDIR /app- ...
- FROM选取基础镜像,也就是
-
其次可以关注
GraphDriver属性。-
Name标明了该镜像的
UnionFS,即overlay2文件系统。 -
Data属性中的LowerDir、MergedDir、UpperDir
-
LowerDir (只读):只读的 image layer,其实就是 rootfs, 在使用 Dockfile 构建镜像的时候就定好了
-
Upperdir (读写):upperdir 则是在 lowerdir 之上的一层, 为读写层。容器在启动的时候会创建, 所有对容 器的修改, 都是在这层。比如容器启动写入的日志文件,或者是应用程序写入的临时文件
-
MergedDir (展示):merged 目录是容器的挂载点,在用户视角能够看到的所有文件
-
-
本节稍微了解了一下Docker的镜像及其构成,下一节我们将从容器出发,了解容器的几个核心技术