【k8s】Docker inspect 命令

  • docker inspect docker.artnj.test.com.cn/cci/mysql:5.6查镜像(image)
  • docker inspect d2a1eca7fba4查容器(container,由该镜像跑出来的实例)

核心一句话

  1. 镜像 (image):静态模板文件,只读,相当于安装包,保存 Dockerfile 构建出来的原始配置、分层文件。
  2. 容器 (container):镜像运行后的运行实例,可读写,相当于把安装包启动成进程;容器 = 镜像 (只读层) + 读写层 + 运行时资源配置。

一、获取镜像mysql:5.6 实例的元信息

容器对象,不是镜像!

bash 复制代码
[
    {
        "Id": "d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423", // 容器完整64位ID
        "Created": "2019-12-21T08:06:52.419384874Z", // 容器创建UTC时间,镜像实例化为容器的时刻,不是启动时间
        "Path": "docker-entrypoint.sh", // 容器入口程序,对应镜像ENTRYPOINT
        "Args": [ // 传给Path的参数,对应镜像CMD
            "mysqld"
        ],
        "State": { // 容器运行状态对象
            "Status": "running", // 容器状态:running/exited/paused/created
            "Running": true, // 是否正在运行
            "Paused": false, // 是否被docker pause暂停
            "Restarting": false, // 是否正在重启过程
            "OOMKilled": false, // true代表被内核OOM杀死
            "Dead": false, // 容器是否损坏无法正常删除
            "Pid": 31054, // 容器1号进程在宿主机上的PID
            "ExitCode": 0, // 退出码,0正常;137代表OOM/kill‑9终止
            "Error": "", // 启动失败错误信息
            "StartedAt": "2019-12-21T08:06:54.372985158Z", // 本次容器启动UTC时间
            "FinishedAt": "0001-01-01T00:00:00Z" // 容器停止UTC时间;运行中为零时间
        },
        "Image": "sha256:3ed1080b793fc4a10cab741a04ce090caf1ad2932cbcc679b6587624af9f6157", // 容器使用镜像完整sha256 ID
        "ResolvConfPath": "/home/emsdata/docker/containers/d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423/resolv.conf", 
// 宿主机上容器DNS配置resolv.conf路径,docker自动维护
        "HostnamePath": "/home/emsdata/docker/containers/d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423/hostname", 
// 宿主机上容器hostname文件路径
        "HostsPath": "/home/emsdata/docker/containers/d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423/hosts", 
// 宿主机上容器/etc/hosts对应文件路径
        "LogPath": "/home/emsdata/docker/containers/d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423/d2a1eca7fba4e80c2c3e373bc6746a15475936e72b735f1d71bb776282940423-json.log",
 // json‑file日志驱动,容器日志宿主机绝对路径
        "Name": "/backstabbing_carson", // 容器名称,自带/前缀
        "RestartCount": 0, // 容器重启计数,每次异常重启+1
        "Driver": "overlay2", // 存储驱动,等价GraphDriver.Name
        "MountLabel": "", // SELinux挂载安全标签,未开启selinux为空
        "ProcessLabel": "", // SELinux进程安全标签
        "AppArmorProfile": "", // AppArmor安全配置文件名,未配置为空
        "ExecIDs": null, // 当前正在执行docker exec会话ID列表;无exec会话为null
        "HostConfig": { // docker run运行时配置,宿主机侧资源、权限、网络配置
            "Binds": null, // 旧版‑v绑定挂载,优先看顶层Mounts,无绑定则null
            "ContainerIDFile": "", // --cidfile,把容器ID写入宿主机文件的路径
            "LogConfig": { // 日志驱动配置
                "Type": "json-file", // 日志驱动类型 json‑file/journald/syslog/none
                "Config": { // 日志驱动参数
                    "max-file": "5", // 最多保留5个日志轮转文件
                    "max-size": "10M" // 单个日志文件最大10MB
                }
            },
            "NetworkMode": "default", // 网络模式 default/bridge/host/none/container:<id>
            "PortBindings": { // 宿主机→容器端口映射配置
                "3306/tcp": [
                    {
                        "HostIp": "", // 宿主机监听IP,空等价0.0.0.0监听所有网卡
                        "HostPort": "3306" // 宿主机端口
                    }
                ]
            },
            "RestartPolicy": { // 容器重启策略
                "Name": "no", // no/always/unless‑stopped/on‑failure
                "MaximumRetryCount": 0 // on‑failure模式最大重试次数
            },
            "AutoRemove": false, // --rm 参数,停止时自动删除容器
            "VolumeDriver": "", // 卷驱动名称,本地卷为local
            "VolumesFrom": null, // --volumes‑from,继承其他容器卷,无则null
            "CapAdd": null, // 添加Linux capability内核权限,无则null
            "CapDrop": null, // 删除Linux capability内核权限,无则null
            "Dns": [], // --dns,自定义DNS服务器列表
            "DnsOptions": [], // --dns‑opt,DNS解析选项
            "DnsSearch": [], // --dns‑search,DNS搜索域
            "ExtraHosts": null, // --add‑host,自定义hosts条目,无则null
            "GroupAdd": null, // 附加宿主机用户组ID,无则null
            "IpcMode": "", // IPC命名空间 private/host/container:<id>
            "Cgroup": "", // 自定义cgroup路径,旧版参数
            "Links": null, // 废弃docker‑link容器链接,无则null
            "OomScoreAdj": 0, // OOM打分 -1000~1000,数值越大越容易被内核OOM杀掉
            "PidMode": "", // PID命名空间 host代表共享宿主机PID
            "Privileged": false, // 是否开启特权模式--privileged
            "PublishAllPorts": false, // -P,把EXPOSE端口全部映射宿主机随机端口
            "ReadonlyRootfs": false, // --read‑only,容器根文件系统只读
            "SecurityOpt": null, // selinux/apparmor安全选项,无则null
            "UTSMode": "", // UTS命名空间 host共享宿主机主机名
            "UsernsMode": "", // 用户命名空间配置
            "ShmSize": 67108864, // /dev/shm大小,单位字节,默认64M
            "Runtime": "runc", // 底层容器运行时,默认runc
            "ConsoleSize": [ // 终端控制台尺寸 [高,宽]
                0,
                0
            ],
            "Isolation": "", // Windows容器隔离模式,Linux为空
            "CpuShares": 0, // CPU相对权重(cgroup v1),0不限制
            "Memory": 0, // 内存硬限制,字节,0不限制
            "CgroupParent": "", // 自定义父cgroup路径
            "BlkioWeight": 0, // 块IO权重10‑1000,0不限制
            "BlkioWeightDevice": null, // 按设备设置块IO权重,无则null
            "BlkioDeviceReadBps": null, // 设备读速率限制BPS,无则null
            "BlkioDeviceWriteBps": null, // 设备写速率限制BPS,无则null
            "BlkioDeviceReadIOps": null, // 设备读IOPS限制,无则null
            "BlkioDeviceWriteIOps": null, // 设备写IOPS限制,无则null
            "CpuPeriod": 0, // CPU调度周期(微秒,cgroup v1)
            "CpuQuota": 0, // CPU配额(微秒)
            "CpuRealtimePeriod": 0, // CPU实时调度周期
            "CpuRealtimeRuntime": 0, // CPU实时运行时间
            "CpusetCpus": "", // 绑定CPU核心,如"0‑2,4"
            "CpusetMems": "", // 绑定NUMA内存节点
            "Devices": [], // --device,透传宿主机设备列表
            "DiskQuota": 0, // 容器磁盘配额,0不限制
            "KernelMemory": 0, // 内核内存限制,字节
            "MemoryReservation": 0, // 内存软限制,字节
            "MemorySwap": 0, // 内存+swap总限制,字节
            "MemorySwappiness": -1, // vm.swappiness,‑1继承宿主机内核值
            "OomKillDisable": false, // 是否关闭OOM killer,不建议开启
            "PidsLimit": 0, // --pids‑limit,容器最大进程数,0不限制
            "Ulimits": null, // 容器ulimit资源限制配置,无则null
            "CpuCount": 0, // Windows容器参数,Linux恒0
            "CpuPercent": 0, // Windows容器参数,Linux恒0
            "IOMaximumIOps": 0, // Windows IOPS限制,Linux恒0
            "IOMaximumBandwidth": 0 // Windows带宽限制,Linux恒0
        },
        "GraphDriver": { // overlay2存储驱动信息,宿主机磁盘路径
            "Name": "overlay2", // 存储驱动类型
            "Data": {
                "LowerDir": "/home/emsdata/docker/overlay2/cf993cdf788bc4b1d8b05514e9affb5112066ad40a1fcb0d04f39c4da4e501a5-init/diff:/home/emsdata/docker/overlay2/2986c967aedf24b23fefbe292ddd2fc5eaf1abac146ffdd180765eac0fef20ad/diff:/home/emsdata/docker/overlay2/f0749d265dc59daae49ee461f15e677a232531eda0c50d7c3dbca1ce22873ccb/diff:/home/emsdata/docker/overlay2/fa4ebda97ab3de379bac349bf76aa736aaa3f68d4158a7eb93f421c69fe1191f/diff:/home/emsdata/docker/overlay2/699958532b4d00264d3712df127966136ec76ee8e83ed09233656c4cdc619798/diff:/home/emsdata/docker/overlay2/74b44d625c12046dde5eb1ee5e5d79dcb919065c8a0de3cee592593cbe472230/diff:/home/emsdata/docker/overlay2/3086261bb85fd60a59aca1f3609712c682330606ce986dfaa1482642cc7acd33/diff:/home/emsdata/docker/overlay2/fa4e61448191900bebfba564d7692e295dfdfe48b6cdfa2adb742ac4a9ec0349/diff:/home/emsdata/docker/overlay2/9c06f6f60cc27bbb06daf14104ff214bb88179094c79115ab3a5a0a00fb501fe/diff:/home/emsdata/docker/overlay2/8239ed480b96ec949f537381531112fd46566eb87a57d5a0e074cf6f26583e2b/diff:/home/emsdata/docker/overlay2/ab4b1a2ea4a0f7f43fd91cdea2a72d596cd14e3763bc15a9adcb0d6e99a55377/diff:/home/emsdata/docker/overlay2/7bd5dbda96f35e74962f1757b0e035c3b17d86b352d3e4afe3a78a7ef421d3be/diff", 
// 只读镜像层diff目录链,冒号分隔多层
                "MergedDir": "/home/emsdata/docker/overlay2/cf993cdf788bc4b1d8b05514e9affb5112066ad40a1fcb0d04f39c4da4e501a5/merged", 
// overlay联合挂载完整视图目录;容器停止会umount
                "UpperDir": "/home/emsdata/docker/overlay2/cf993cdf788bc4b1d8b05514e9affb5112066ad40a1fcb0d04f39c4da4e501a5/diff", 
// 容器读写层,所有新增修改文件落在此
                "WorkDir": "/home/emsdata/docker/overlay2/cf993cdf788bc4b1d8b05514e9affb5112066ad40a1fcb0d04f39c4da4e501a5/work" 
// overlay内部CoW写时复制临时工作目录,禁止手动修改
            }
        },
        "Mounts": [ // 挂载列表 volume/bind/tmpfs
            {
                "Type": "volume", // 挂载类型 volume/docker管理卷 | bind宿主机绑定 | tmpfs内存挂载
                "Name": "af1d7290422301204b8bca43542e1a26a6241e8d0761f04e34e8a0bb5357021c", 
// docker volume卷名;bind挂载时为空
                "Source": "/home/emsdata/docker/volumes/af1d7290422301204b8bca43542e1a26a6241e8d0761f04e34e8a0bb5357021c/_data",
 // 宿主机真实路径
                "Destination": "/var/lib/mysql", // 容器内挂载点路径
                "Driver": "local", // 卷驱动,本地卷local
                "Mode": "", // 挂载参数 ro/rw等
                "RW": true, // true读写,false只读
                "Propagation": "" // 挂载传播属性 rprivate/rshared等
            }
        ],
        "Config": { // 镜像静态配置,来自Dockerfile,run不会修改这里
            "Hostname": "d2a1eca7fba4", // 容器主机名
            "Domainname": "", // 容器域名
            "User": "", // 镜像运行用户,root为空字符串
            "AttachStdin": false, // 是否attach标准输入
            "AttachStdout": false, // 是否attach标准输出
            "AttachStderr": false, // 是否attach标准错误
            "ExposedPorts": { // Dockerfile EXPOSE声明端口,仅文档,不等于端口映射
                "3306/tcp": {}
            },
            "Tty": false, // 是否分配tty终端,对应‑t
            "OpenStdin": false, // 是否开启stdin,对应‑i
            "StdinOnce": false, // stdin关闭后是否关闭容器
            "Env": [ // 环境变量数组 KEY=VALUE
                "MYSQL_ROOT_PASSWORD=123456",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.6",
                "MYSQL_VERSION=5.6.44-1debian9"
            ],
            "Cmd": [ // 镜像CMD指令
                "mysqld"
            ],
            "Image": "docker.artnj.test.com.cn/cci/mysql:5.6", // 镜像名称
            "Volumes": { // Dockerfile VOLUME声明的卷
                "/var/lib/mysql": {}
            },
            "WorkingDir": "", // WORKDIR容器工作目录
            "Entrypoint": [ // 镜像ENTRYPOINT
                "docker-entrypoint.sh"
            ],
            "OnBuild": null, // Dockerfile OnBuild指令,无则null
            "Labels": {} // 镜像label标签键值对
        },
        "NetworkSettings": { // 网络配置对象,IP、端口、netns命名空间
            "Bridge": "", // 网桥名称,bridge网络为docker0
            "SandboxID": "333d5dfae74da6f121e2b763c56ccc6005abfbf58f2bb1657494b0d94787244f", 
   // 网络沙箱ID
            "HairpinMode": false, // 发夹模式,容器内部回环转发开关
            "LinkLocalIPv6Address": "", // 链路本地IPv6地址
            "LinkLocalIPv6PrefixLen": 0, // 链路本地IPv6掩码长度
            "Ports": { // 实际生效端口映射
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/333d5dfae74d", // 网络命名空间路径,ip netns调试使用
            "SecondaryIPAddresses": null, // 附属IPv4多IP,无则null
            "SecondaryIPv6Addresses": null, // 附属IPv6多IP,无则null
            "EndpointID": "824a6f6acb559fcc39639e67384dcd628647b6609c103cd27b74cf0d59dd9695", // 默认bridge网络端点ID
            "Gateway": "172.17.0.1", // 默认bridge网关
            "GlobalIPv6Address": "", // 全局IPv6地址
            "GlobalIPv6PrefixLen": 0, // 全局IPv6掩码长度
            "IPAddress": "172.17.0.9", // 仅默认bridge网络IP,多网卡不准,以Networks为准
            "IPPrefixLen": 16, // IPv4子网掩码长度
            "IPv6Gateway": "", // IPv6网关
            "MacAddress": "02:42:ac:11:00:09", // 默认bridge网卡MAC
            "Networks": { // 全部网络实例,key为网络名,多网卡全部在此
                "bridge": {
                    "IPAMConfig": null, // 静态IP配置,DHCP自动获取为null
                    "Links": null, // 废弃docker‑link,无则null
                    "Aliases": null, // 该网络内DNS别名,无则null
                    "NetworkID": "c2585d639e79d77290705a47ff4e223bbdbdd36b452c24aedd37e1f7db3396ac", 
// docker网络ID
                    "EndpointID": "824a6f6acb559fcc39639e67384dcd628647b6609c103cd27b74cf0d59dd9695", 
// 该网络端点ID
                    "Gateway": "172.17.0.1", // 该网络网关
                    "IPAddress": "172.17.0.9", // 容器在此网络的IP
                    "IPPrefixLen": 16, // 子网掩码长度
                    "IPv6Gateway": "", // IPv6网关
                    "GlobalIPv6Address": "", // 全局IPv6地址
                    "GlobalIPv6PrefixLen": 0, // IPv6掩码
                    "MacAddress": "02:42:ac:11:00:09" // 该网卡MAC地址
                }
            }
        }
    }
]

二、镜像元数据

bash 复制代码
[
    {
        "Id": "sha256:3ed1080b793fc4a10cab741a04ce090caf1ad2932cbcc679b6587624af9f6157", // 镜像ID,镜像全局唯一sha256标识
        "RepoTags": [ // 镜像标签列表,<仓库地址>/<镜像名>:<版本>,一个镜像可打多个tag
            "docker.artnj.test.com.cn/cci/mysql:5.6"
        ],
        "RepoDigests": [ // 镜像摘要,sha256,拉取时可通过摘要精准定位镜像,防止标签被篡改覆盖
            "docker.artnj.test.com.cn/cci/mysql@sha256:64d700fe4d28bad980507ff893f341702c2273d0a42ea4da461163930276b09b"
        ],
        "Parent": "", // 父镜像ID,本镜像基于哪个镜像构建;顶层镜像为空
        "Comment": "", // 构建时注释信息,Dockerfile的LABEL或build --comment写入
        "Created": "2019-06-10T23:46:27.411001795Z", // 镜像构建完成的UTC时间,不是容器创建时间
        "Container": "9c48ed588eb1d0e8a88c36adec31d76b4d683cb522fb20d9582f4c42fcab8e0d",
        // 构建该镜像时,中间临时容器ID;docker build会启动临时容器执行Dockerfile指令,提交生成镜像
        "ContainerConfig": {
            // 构建镜像的临时容器配置,是提交镜像那一刻,临时容器当时的配置状态,主要用于镜像历史追溯
            "Hostname": "9c48ed588eb1", // build临时容器主机名
            "Domainname": "", // 临时容器域名
            "User": "", // 运行用户,空代表root
            "AttachStdin": false, // 是否附着标准输入
            "AttachStdout": false, // 是否附着标准输出
            "AttachStderr": false, // 是否附着标准错误
            "ExposedPorts": { // Dockerfile EXPOSE声明的端口,仅文档标记,不会自动端口映射
                "3306/tcp": {}
            },
            "Tty": false, // 是否分配终端tty
            "OpenStdin": false, // 是否开启标准输入
            "StdinOnce": false, // stdin关闭后是否直接退出容器
            "Env": [ // 构建结束后,临时容器内的环境变量,最终会固化到镜像
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.6",
                "MYSQL_VERSION=5.6.44-1debian9"
            ],
            "Cmd": [ // 构建提交镜像时,临时容器当时的CMD;会被处理,最终生成镜像Config.Cmd
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"mysqld\"]"
            ],
            "ArgsEscaped": true, // 参数是否已经转义,内部字段
            "Image": "sha256:b08878951f5677e5cdc610df30e5901a8238c92e097f5ca646be18c145d6cdda",
            // build时的基础父镜像ID
            "Volumes": { // Dockerfile VOLUME声明,声明容器运行时需要做持久化的目录,镜像本身不含数据
                "/var/lib/mysql": {}
            },
            "WorkingDir": "", // 工作目录,未设置
            "Entrypoint": [ // 镜像入口程序,Dockerfile ENTRYPOINT固化
                "docker-entrypoint.sh"
            ],
            "OnBuild": null, // Dockerfile ONBUILD指令,子镜像构建时才执行,无则null
            "Labels": {} // 镜像标签元数据
        },
        "DockerVersion": "18.06.1-ce", // 用哪个版本Docker build出这个镜像
        "Author": "", // 镜像作者,旧版Docker元数据
        "Config": {
            // ✅镜像对外核心配置!容器run启动时,默认继承这一套;docker run参数可以覆盖这里的值
            "Hostname": "", // 容器默认主机名,启动容器时Docker自动生成,镜像内为空
            "Domainname": "", // 默认域名
            "User": "", // 默认运行用户,空=root
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": { // EXPOSE声明端口,只是提示,不做实际网络操作
                "3306/tcp": {}
            },
            "Tty": false, // 默认不分配tty
            "OpenStdin": false, // 默认不开启stdin
            "StdinOnce": false,
            "Env": [ // 镜像内置环境变量,容器启动默认继承;run -e可以新增/覆盖
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.6",
                "MYSQL_VERSION=5.6.44-1debian9"
            ],
            "Cmd": [ // 默认命令,ENTRYPOINT之后执行;run时可以覆盖
                "mysqld"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:b08878951f5677e5cdc610df30e5901a8238c92e097f5ca646be18c145d6cdda",
            "Volumes": { // Dockerfile VOLUME声明,仅声明目录,**镜像没有宿主机挂载路径**
                "/var/lib/mysql": {}
            },
            "WorkingDir": "", // 默认工作目录
            "Entrypoint": [ // 镜像入口脚本,容器启动第一个执行程序
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64", // CPU架构 x86_64
        "Os": "linux", // 操作系统,镜像只能跑在Linux内核环境
        "Size": 256398124, // 镜像总大小(字节),所有层实际占用总和
        "VirtualSize": 256398124, // 虚拟大小,含元数据,一般等于Size
        "GraphDriver": {
            // 镜像在宿主机overlay2存储驱动的磁盘路径;⚠️镜像这里的UpperDir/MergedDir是镜像构建结束后
            // 的残留目录,镜像本身是只读!**不要和容器GraphDriver混淆,容器会生成全新一套UpperDir读写层**
            "Name": "overlay2", // 使用的存储驱动
            "Data": {
                "LowerDir": "/home/emsdata/docker/overlay2/f0749d265dc59daae49ee461f15e677a232531eda0c50d7c3dbca1ce22873ccb/diff:/home/emsdata/docker/overlay2/fa4ebda97ab3de379bac349bf76aa736aaa3f68d4158a7eb93f421c69fe1191f/diff:/home/emsdata/docker/overlay2/699958532b4d00264d3712df127966136ec76ee8e83ed09233656c4cdc619798/diff:/home/emsdata/docker/overlay2/74b44d625c12046dde5eb1ee5e5d79dcb919065c8a0de3cee592593cbe472230/diff:/home/emsdata/docker/overlay2/3086261bb85fd60a59aca1f3609712c682330606ce986dfaa1482642cc7acd33/diff:/home/emsdata/docker/overlay2/fa4e61448191900bebfba564d7692e295dfdfe48b6cdfa2adb742ac4a9ec0349/diff:/home/emsdata/docker/overlay2/9c06f6f60cc27bbb06daf14104ff214bb88179094c79115ab3a5a0a00fb501fe/diff:/home/emsdata/docker/overlay2/8239ed480b96ec949f537381531112fd46566eb87a57d5a0e074cf6f26583e2b/diff:/home/emsdata/docker/overlay2/ab4b1a2ea4a0f7f43fd91cdea2a72d596cd14e3763bc15a9adcb0d6e99a55377/diff:/home/emsdata/docker/overlay2/7bd5dbda96f35e74962f1757b0e035c3b17d86b352d3e4afe3a78a7ef421d3be/diff",
                // LowerDir:镜像全部只读层diff目录链,冒号分隔,底层在前上层在后,全部只读,多个镜像可共享这些层
                "MergedDir": "/home/emsdata/docker/overlay2/2986c967aedf24b23fefbe292ddd2fc5eaf1abac146ffdd180765eac0fef20ad/merged",
                // 镜像构建完成时联合挂载视图;镜像构建结束会umount,镜像运行(启动容器)不会复用此merged
                "UpperDir": "/home/emsdata/docker/overlay2/2986c967aedf24b23fefbe292ddd2fc5eaf1abac146ffdd180765eac0fef20ad/diff",
                // 镜像构建时临时容器读写层;镜像提交完成后冻结为只读层,容器启动会新建一套全新UpperDir,不用这个
                "WorkDir": "/home/emsdata/docker/overlay2/2986c967aedf24b23fefbe292ddd2fc5eaf1abac146ffdd180765eac0fef20ad/work"
                // 构建阶段CoW写时复制工作目录,镜像完成后不再使用
            }
        },
        "RootFS": {
            // 镜像根文件系统,记录每一层diffID,真正镜像分层数据;pull镜像下载就是这些layers
            "Type": "layers", // 类型分层存储
            "Layers": [
                "sha256:cf5b3c6798f77b1f78bf4e297b27cfa5b6caa982f04caeb5de7d13c255fd7a1e",
                "sha256:b686f68f8333dcd3c61717b236ead61e76623eca5ca52310c4efba5632aef6fc",
                "sha256:b983f63f4c271ebf11edaa04de105c35ceddf1cbe152db47dc7f871da53454db",
                "sha256:cf1d44aef62da0cec4ca16fb23d62f935c542f859c88704288bd4a8da0a9454f",
                "sha256:17d2cfdb93fc387257be73e4517d0fbb944c420894df66807899658e510ec7f1",
                "sha256:c70e6a41f98cad06754f64519b0798fcccd55fb579b644f2c39d37d7cdcfa2fc",
                "sha256:1e5cc0d1c33d8a28720dfe93659d8a8e10978774eb6fa5f2f7ae63a05d98b721",
                "sha256:999b5130f4e92686f78f1b105efee9a8a1cdaea3e7551d9d40374b81ae60cd81",
                "sha256:a5fcf7bb9e94aef821e8769f54e573019bb3a34d3c8efc399c5b3eaa64568f23",
                "sha256:1086cb31b2c49225b0804a232806389d4c0dfeb0c5cd9bb6e79e208c582fc900",
                "sha256:3102b0030161820328562a99291bfd43368fd6fa67301ecf2f69c13c05561035"
            ]
            // layers数组顺序:从底层基础层到上层,全部只读;多个镜像共享相同diffID层,实现磁盘复用
        }
    }
]

三、镜像 vs 容器 GraphDriver 重点区分(极易踩坑)

  1. 镜像 GraphDriver 的 UpperDir/MergedDir/WorkDirbuild 构建镜像过程中临时容器的目录。镜像提交完毕,这些目录冻结为只读层。

    ⚠️启动容器不会复用镜像这套 UpperDir!容器会全新生成自己独立的 UpperDir 读写层

  2. 容器 GraphDriver

    • LowerDir:直接复用镜像的全部只读层(和镜像 RootFS 一一对应,磁盘共享)
    • UpperDir容器专属读写层,容器所有写入操作全部落这里,容器删除此目录删除
    • MergedDir:容器运行时联合挂载视图,容器 stop 后 umount
    • WorkDir:容器运行时 CoW 临时目录
  3. 镜像没有:StateHostConfigMountsNetworkSettings,这些全部属于运行时容器实例。

相关推荐
猫吃了源码2 小时前
CentOS7使用Kubeadm安装部署K8s(Kubernetes)最新稳定版本1.26.x
云原生·容器·kubernetes
倔强的石头1062 小时前
飞牛OS部署Mtab:Docker搭建自托管书签导航并实现远程访问
运维·docker·容器
张忠琳3 小时前
【k3s】AutoK3s v0.9.3 —— Part 7 辅助模块超深度逐行分析
云原生·容器·kubernetes·k3s·autok3s
张忠琳12 小时前
【k3s】AutoK3s v0.9.3 Part 1 入口与 CLI 命令模块 — 超深度逐行分析之三
云原生·容器·kubernetes·k3s·autok3s
apgk118 小时前
基于Canal实现mysql数据同步到消息队列(RabbitMQ/Kafka)详细操作教程
docker·kafka·rabbitmq
fatcoder18 小时前
玩转Docker 06 — 容器网络
前端·后端·docker
xiaoxiangsiyan19 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns
AR_xsy19 小时前
docker--资源配额 配置
运维·docker·容器
国际云,接待20 小时前
Docker 容器突然退出、服务莫名重启:从 OOMKilled 到内存泄漏的生产排查手册
运维·docker·容器