docker inspect docker.artnj.test.com.cn/cci/mysql:5.6→ 查镜像(image)docker inspect d2a1eca7fba4→ 查容器(container,由该镜像跑出来的实例)
核心一句话
- 镜像 (image):静态模板文件,只读,相当于安装包,保存 Dockerfile 构建出来的原始配置、分层文件。
- 容器 (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 重点区分(极易踩坑)
-
镜像 GraphDriver 的 UpperDir/MergedDir/WorkDir 是build 构建镜像过程中临时容器的目录。镜像提交完毕,这些目录冻结为只读层。
⚠️启动容器不会复用镜像这套 UpperDir!容器会全新生成自己独立的 UpperDir 读写层。
-
容器 GraphDriver
LowerDir:直接复用镜像的全部只读层(和镜像 RootFS 一一对应,磁盘共享)UpperDir:容器专属读写层,容器所有写入操作全部落这里,容器删除此目录删除MergedDir:容器运行时联合挂载视图,容器 stop 后 umountWorkDir:容器运行时 CoW 临时目录
-
镜像没有:
State、HostConfig、Mounts、NetworkSettings,这些全部属于运行时容器实例。