┌─────────────────────────────────────────────────┐
│ OCI Image (sha256:abc...) │
├─────────────────────────────────────────────────┤
│ manifest.json │
│ { │
│ "schemaVersion": 2, │
│ "mediaType": "application/vnd.oci.image.manifest.v1+json", │
│ "config": { digest: "sha256:111..." }, │ ← Image config
│ "layers": [ │
│ { digest: "sha256:aaa..." }, │ ← Layer 1 (e.g. base OS)
│ { digest: "sha256:bbb..." }, │ ← Layer 2 (e.g. deps)
│ { digest: "sha256:ccc..." } │ ← Layer 3 (e.g. your code)
│ ] │
│ } │
├─────────────────────────────────────────────────┤
│ config (sha256:111...) │
│ { │
│ "architecture": "amd64", │
│ "os": "linux", │
│ "config": { │
│ "Entrypoint": ["/app/start.sh"], │
│ "Env": ["PATH=...", "PORT=8080"], │
│ "WorkingDir": "/app", │
│ "User": "1000:1000", │
│ "ExposedPorts": { "8080/tcp": {} } │
│ }, │
│ "rootfs": { │
│ "type": "layers", │
│ "diff_ids": ["sha256:...", ...] │
│ }, │
│ "history": [ │
│ { created: "...", created_by: "FROM ..." },
│ ... │
│ ] │
│ } │
├─────────────────────────────────────────────────┤
│ layer 1 (sha256:aaa...) = base OS rootfs.tar.gz │
│ layer 2 (sha256:bbb...) = deps add tar.gz │
│ layer 3 (sha256:ccc...) = your code tar.gz │
└─────────────────────────────────────────────────┘