Docker 镜像 层结构理解
阅读原文时间:2023年07月10日阅读:1

镜像到底是什么、镜像的层结构又是什么

通过docker history命令进行分析,镜像是一种其他镜像+文件+命令的组合。

这些镜像的加载、文件导入创建、命令是存在顺序关系的,所以也引出了层的概念。

[root@localhost ~]# docker history postgres
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
b97bae343e06        20 months ago       /bin/sh -c #(nop)  CMD ["postgres"]             0B
<missing>           20 months ago       /bin/sh -c #(nop)  EXPOSE 5432                  0B
<missing>           20 months ago       /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           20 months ago       /bin/sh -c ln -s usr/local/bin/docker-entryp…   34B
<missing>           20 months ago       /bin/sh -c #(nop) COPY file:bf774aaf2659f830…   10.9kB
<missing>           20 months ago       /bin/sh -c #(nop)  VOLUME [/var/lib/postgres…   0B
<missing>           20 months ago       /bin/sh -c mkdir -p "$PGDATA" && chown -R po…   0B
<missing>           20 months ago       /bin/sh -c #(nop)  ENV PGDATA=/var/lib/postg…   0B
<missing>           20 months ago       /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B
<missing>           20 months ago       /bin/sh -c mkdir -p /var/run/postgresql && c…   0B
<missing>           20 months ago       /bin/sh -c set -eux;  dpkg-divert --add --re…   53.6kB
<missing>           20 months ago       /bin/sh -c set -ex;   export PYTHONDONTWRITE…   204MB
<missing>           20 months ago       /bin/sh -c #(nop)  ENV PG_VERSION=12.3-1.pgd…   0B
<missing>           20 months ago       /bin/sh -c #(nop)  ENV PG_MAJOR=12              0B
<missing>           20 months ago       /bin/sh -c set -ex;  key='B97B0AFCAA1A47F044…   2.88kB
<missing>           20 months ago       /bin/sh -c mkdir /docker-entrypoint-initdb.d    0B
<missing>           20 months ago       /bin/sh -c set -eux;  apt-get update;  apt-g…   1.39MB
<missing>           20 months ago       /bin/sh -c #(nop)  ENV LANG=en_US.utf8          0B
<missing>           20 months ago       /bin/sh -c set -eux;  if [ -f /etc/dpkg/dpkg…   24.9MB
<missing>           20 months ago       /bin/sh -c set -eux;  savedAptMark="$(apt-ma…   4.17MB
<missing>           20 months ago       /bin/sh -c #(nop)  ENV GOSU_VERSION=1.12        0B
<missing>           20 months ago       /bin/sh -c set -eux;  groupadd -r postgres -…   329kB
<missing>           20 months ago       /bin/sh -c set -ex;  if ! command -v gpg > /…   9.34MB
<missing>           20 months ago       /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           20 months ago       /bin/sh -c #(nop) ADD file:4d35f6c8bbbe6801c…   69.2MB

下面命令可以作为Dockerfile创建镜像的第一行,下面使用的Centos7作为发行版。

FROM centos:7

Docker依赖于Linux内核,实际下载的centos:7 镜像体积非常小,因为最后使用的还是宿主机内核。

各层中的命令对Base镜像进行改造,以满足各种功能。例如镜像增加httpd组件。

RUN yum install -y httpd

巨人的肩膀

Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)

理解Docker镜像分层 - Ryan.Miao - 博客园 (cnblogs.com)