SlideShare a Scribd company logo
1 of 41
Download to read offline
SPONSORS
Speaker: Robert Bohne
Company:
Demystifying Container
Images: Understanding
Multi-Architecture, Manifests,
IDs, and Digests
3
Build
Where do we start?
Demystifying Container Images: Understanding
Multi-Architecture, Manifests, IDs, and Digests
Registry Run
4
Build
Container build
Where do we start?
Registry
Container Registry
Run
Container Runtime
5
Build
Container build
Build
Where do we start?
Registry
Container Registry
Run
Container Runtime
Container
Image
6
Build
Container build
Push to Registry
Where do we start?
Registry
Container Registry
Run
Container Runtime
Container
Image
Container
Image
Push
7
Build
Container build
Pull
Where do we start?
Registry
Container Registry
Run
Container Runtime
Container
Image
Container
Image
Container
Image
Push Pull
8
Build
Container build
Run
Where do we start?
Registry
Container Registry
Run
Container Runtime
Container
(Process)
Container
Image
Container
Image
Container
Image
Push Pull
9
Container build
Tools?
Container Registry Container Runtime
Push Pull
10
Source:
https://github.com/containers
Container build
Tools?
Container Registry Container Runtime
Push Pull
11
Source:
https://opencontainers.org/
https://github.com/opencontainers/
Container build
Standards / Specifications
Container Registry Container Runtime
Push Pull
12
Source:
https://opencontainers.org/
https://github.com/opencontainers/
Container build
Image Spec
Container Registry
Distribution Spec
Container Runtime
Runtime Spec
Push Pull
13
Source:
https://opencontainers.org/
https://github.com/opencontainers/
Container build
Container build
FROM registry.access.redhat.com/ubi9/ubi-micro AS runner
CMD ["uname","-om" ]
Containerfile
$ buildah bud 
-t quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) 
.
Command line
Container
Image
Container Image
Manifest
Configuration
Filesystem layers
Container Image for amd64/x86_64
14
Container Image
(we are still in the runtime)
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
15
Container Image
Manifest
Container Image
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": "sha256:f89495e3e0be655cdd4abc0048fbd3974658e9c07296ff4cdcf5e4e3226edc41",
"size": 4236
},
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar",
"digest": "sha256:e54dc53d0edbbc96d3307fdea7bc1ed433d9083a1aab033dc3b38fd8b4fb165a",
"size": 26090496
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar",
"digest": "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"size": 1024
}
],
"annotations": {
"org.opencontainers.image.base.digest": "sha256:18a01cb5c53560ca2295e8a218454fe33b330ad6fac0d0ea43a513cd93787b7f",
"org.opencontainers.image.base.name": "registry.access.redhat.com/ubi9/ubi-micro:latest"
}
}
Manifest
16
Container Image
Configuration
Container Image
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
{
"created": "2023-07-14T11:49:23.062774594Z",
"architecture": "amd64",
"os": "linux",
"config": {
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"Cmd": ["uname","-om"],
"Labels": {
"architecture": "x86_64",
"build-date": "2023-06-15T11:05:34",
[...snipped...]
}
},
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:e54dc53d0edbbc96d3307fdea7bc1ed433d9083a1aab033dc3b38fd8b4fb165a",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
]
},
"history": [
[...snipped...]
]
}
Configuration
17
Container Image
(we are still in the runtime)
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
[root@centos-amd64 multi-arch]# podman images --digests --no-trunc
REPOSITORY TAG DIGEST IMAGE ID
quay.io/openshift-examples/multi-arch kcdmunich2023-x86_64 sha256:d9b46d23c9f8 sha256:f89495e3e0be
…
Command line
Blob - sha256:f89495e3e0be
18
Container Image
(we are still in the runtime)
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
[root@centos-amd64 multi-arch]# podman images --digests --no-trunc
REPOSITORY TAG DIGEST IMAGE ID
quay.io/openshift-examples/multi-arch kcdmunich2023-x86_64 sha256:d9b46d23c9f8 sha256:f89495e3e0be
…
Blob - sha256:f89495e3e0be
Command line
19
Source:
https://github.com/containers
Container build
Push to Container Registry
Container Registry
Push
20
Push the Container Image
[root@centos-amd64 multi-arch]# podman push quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64
Getting image source signatures
Copying blob 5f70bf18a086 done
Copying blob e54dc53d0edb done
Copying config f89495e3e0 done
Writing manifest to image destination
Storing signatures
Command line
Quay.io webui
😱
21
Container Image
(pushed)
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Registry Runtime
22
Container Image
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
Registry Runtime
23
Container Image
Manifest from Container Registry
Container Image
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Blob - sha256:f89495e3e0be
Blob - sha256:e54dc53d0edb
Blob - sha256:5f70bf18a086
Blob - sha256:d9b46d23c9f8
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": "sha256:f89495e3e0be655cdd4abc0048fbd3974658e9c07296ff4cdcf5e4e3226edc41",
"size": 4236
},
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:940034fae708a1fe0ee6ff6929fffd48c235a6da185812ea4b31bab58815b6cf",
"size": 26090496
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:bd9ddc54bea929a22b334e73e026d4136e5b73f5cc29942896c72e4ece69b13d",
"size": 1024
}
],
"annotations": {
"org.opencontainers.image.base.digest": "sha256:18a01cb5c53560ca2295e8a218454fe33b330ad6fac0d0ea43a513cd93787b7f",
"org.opencontainers.image.base.name": "registry.access.redhat.com/ubi9/ubi-micro:latest"
}
}
Manifest
24
Container Image
(pushed)
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
25
Source:
https://github.com/containers
Container build
Let’s run the Container Image
Container Registry Container Runtime
Push Pull
26
Run the Container Image on amd64/x86_64
[root@centos-amd64-run ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64...
Getting image source signatures
Copying blob bd9ddc54bea9 done
Copying blob 940034fae708 done
Copying config f89495e3e0 done
Writing manifest to image destination
Storing signatures
x86_64 GNU/Linux
[root@centos-amd64-run ~]#
Command line
👏 ✅ amd64/x86_64 container image running
✅ application ‘uname -om’
27
Run the Container Image on ARM64
[root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64...
Getting image source signatures
Copying blob 940034fae708 skipped: already exists
Copying blob bd9ddc54bea9 done
Copying config f89495e3e0 done
Writing manifest to image destination
Storing signatures
WARNING: image platform (linux/amd64) does not match the expected platform (linux/arm64)
{"msg":"exec container process `/usr/bin/uname`: Exec format error","level":"error","time":"2023-07-14T13:49:01.044372Z"}
Command line
😠
📛 amd64/x86_64 container image running
📛 application ‘uname -om’
28
Let’s build, push and run an ARM64 image
[root@centos-arm64 multi-arch]# buildah bud -t quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) .
STEP 1/2: FROM registry.access.redhat.com/ubi9/ubi-micro AS runner
Trying to pull registry.access.redhat.com/ubi9/ubi-micro:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 5c3f8435842b done
Copying config e2742eb12e done
Writing manifest to image destination
Storing signatures
STEP 2/2: CMD ["uname","-om" ]
COMMIT quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64
Getting image source signatures
Copying blob 9eda08853b4a skipped: already exists
Copying blob 5f70bf18a086 skipped: already exists
Copying config 05447a1ff2 done
Writing manifest to image destination
Storing signatures
--> 05447a1ff2eb
Successfully tagged quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64
05447a1ff2eb966612bfbebd8f78f61ae7d0ffba09ce4dd9b4aaf8f384a75f21
Command line
29
Let’s build, push and run an ARM64 image
[root@centos-arm64 multi-arch]# buildah push quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m)
Getting image source signatures
Copying blob 9eda08853b4a done
Copying blob bd9ddc54bea9 skipped: already exists
Copying config 05447a1ff2 done
Writing manifest to image destination
Storing signatures
Command line
Quay.io webui
30
Container Image
(pushed)
Container Image for arm64/aarch64
Manifest
Configuration
Filesystem layers
Blob - sha256:05447a1ff2eb
Blob - sha256:5c3f8435842b
Blob - sha256:bd9ddc54bea9
Blob - sha256:b2be25b1c834
👉 Same structure as amd64/x86_64
👉 Manifest sha256 and compression of layers changed between build and push as well!
31
Let’s build, push and run an ARM64 image
[root@centos-arm64 multi-arch]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m)
aarch64 GNU/Linux
Command line
👏 ✅ arm64 container image running
✅ application ‘uname -om’
32
Run the Container Image on amd64/X86_64
[root@centos-amd64-run ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64...
Getting image source signatures
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 5c3f8435842b done
Copying config 05447a1ff2 done
Writing manifest to image destination
Storing signatures
WARNING: image platform (linux/arm64) does not match the expected platform (linux/amd64)
{"msg":"exec container process `/usr/bin/uname`: Exec format error","level":"error","time":"2023-07-14T14:04:50.249825Z"}
Command line
😠
📛 aarch64 container image running
📛 application ‘uname -om’
33
Let’s create a Multi-Arch Container Image
Container Image for arm64/aarch64
Manifest
Configuration
Filesystem layers
Blob - sha256:05447a1ff2eb
Blob - sha256:5c3f8435842b
Blob - sha256:b2be25b1c834
Blob - sha256:bd9ddc54bea9
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Manifest
Index “Image” / Fat Manifest
arm64
amd64
Let’s create a Multi-Arch Container Image
[root@centos-amd64 multi-arch]# buildah manifest create manifestlist/v1
74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f
[root@centos-amd64 multi-arch]# buildah manifest add manifestlist/v1 quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64
74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f: sha256:b2be25b1c8344d0f6a028a9b50d2e42ba25451c2d19fef3635dbd131d005bbf4
[root@centos-amd64 multi-arch]# buildah manifest add manifestlist/v1 quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64
74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f: sha256:d3b7a48ede6086835f0b97a82f9baaaa2d566072aec7e209d4341eb29566fafb
[root@centos-amd64 multi-arch]# buildah manifest push manifestlist/v1 docker://quay.io/openshift-examples/multi-arch:kcdmunich2023
Getting image list signatures
Copying 0 of 2 images in list
Writing manifest list to image destination
Storing list signatures
[root@centos-amd64 multi-arch]# buildah manifest rm manifestlist/v1
untagged: localhost/manifestlist/v1:latest
74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f
Command line
Manifest
35
Let’s create a Multi-Arch Container Image
Container Image for arm64/aarch64
Manifest
Configuration
Filesystem layers
Blob - sha256:05447a1ff2eb
Blob - sha256:5c3f8435842b
Blob - sha256:bd9ddc54bea9
Blob - sha256:b2be25b1c834
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Index “Image” / Fat Manifest
arm64
amd64
Blob - sha256:8a2f1bc89213
36
Let’s create a Multi-Arch Container Image
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.index.v1+json",
"manifests": [
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:b2be25b1c8344d0f6a028a9b50d2e42ba25451c2d19fef3635dbd131d005bbf4",
"size": 776,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:d3b7a48ede6086835f0b97a82f9baaaa2d566072aec7e209d4341eb29566fafb",
"size": 776,
"platform": {
“architecture": "amd64",
"os": "linux"
}
}
]
}
Manifest
37
Run the Container Image
[root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023...
Getting image source signatures
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 5c3f8435842b skipped: already exists
Copying config 05447a1ff2 done
Writing manifest to image destination
Storing signatures
aarch64 GNU/Linux
[root@centos-arm64 ~]#
Command line
👏
[root@centos-amd64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023...
Getting image source signatures
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 940034fae708 skipped: already exists
Copying config f89495e3e0 done
Writing manifest to image destination
Storing signatures
x86_64 GNU/Linux
[root@centos-amd64 ~]#
Command line
👏
38
Run the Container Image
[root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023...
Getting image source signatures
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 5c3f8435842b skipped: already exists
Copying config 05447a1ff2 done
Writing manifest to image destination
Storing signatures
aarch64 GNU/Linux
[root@centos-arm64 ~]#
Command line
👏
[root@centos-amd64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023
Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023...
Getting image source signatures
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 940034fae708 skipped: already exists
Copying config f89495e3e0 done
Writing manifest to image destination
Storing signatures
x86_64 GNU/Linux
[root@centos-amd64 ~]#
Command line
👏
Container Runtime select Container Image based on
● platform.architecture - REQUIRED, GOARCH
● platform.os - REQUIRED, GOOS
● platform.os.version - optional, windows only.
Manifest
39
Let’s create a Multi-Arch Container Image
Container Image for arm64/aarch64
Manifest
Configuration
Filesystem layers
Blob - sha256:05447a1ff2eb
Blob - sha256:5c3f8435842b
Blob - sha256:bd9ddc54bea9
Blob - sha256:b2be25b1c834
Container Image for amd64/x86_64
Manifest
Configuration
Filesystem layers
Blob - sha256:f89495e3e0be
Blob - sha256:940034fae708
Blob - sha256:bd9ddc54bea9
Blob - sha256:d3b7a48ede60
Index “Image” / Fat Manifest
arm64
amd64
Blob - sha256:8a2f1bc89213
40 https://quay.io/repository/openshift-examples/multi-arch
https://explore.ggcr.dev/?repo=quay.io/openshift-examples/multi-arch
Container Image Overview
41
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:57f1b9ae0b74d98ba7a8e70fa00758712f92ed3c06b3beda51c5c9ba93ba65e7",
"platform": { "architecture": "amd64", "os": "linux" }
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:48f4a90f0c61ed8727c034e5336046949052376bd4ae9f9d538c6f8a2dd8c571",
"platform": { "architecture": "arm64", "os": "linux" }
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:0037d35ed71250996928d5db1f4d4761f810b34d0bfee0202c7e3a6394897502",
"platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.17763.2928" }
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:7d9065900b046d7612ef131da7444114109db252a43de212277ffa51fe738169",
"platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.20348.707" }
}
]
}
Multi-Arch, Multi-OS, Multi-OS-Version Container Image?
mcr.microsoft.com/oss/kubernetes/pause:3.9
Manifest
43
Blog post Slides Background info
Questions?
Thank you!

More Related Content

What's hot

A Comparison of EDB Postgres to Self-Supported PostgreSQL
A Comparison of EDB Postgres to Self-Supported PostgreSQLA Comparison of EDB Postgres to Self-Supported PostgreSQL
A Comparison of EDB Postgres to Self-Supported PostgreSQLEDB
 
Windows virtual desktop l100 presentation
Windows virtual desktop l100 presentationWindows virtual desktop l100 presentation
Windows virtual desktop l100 presentationkiefter
 
Linux Administration
Linux AdministrationLinux Administration
Linux AdministrationHarish1983
 
Provisioning and automating high availability postgres on aws ec2 (1)
Provisioning and automating high availability postgres on aws ec2 (1)Provisioning and automating high availability postgres on aws ec2 (1)
Provisioning and automating high availability postgres on aws ec2 (1)Payal Singh
 
PostgreSQL for Oracle Developers and DBA's
PostgreSQL for Oracle Developers and DBA'sPostgreSQL for Oracle Developers and DBA's
PostgreSQL for Oracle Developers and DBA'sGerger
 
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6VMware ESXi - Intel and Qlogic NIC throughput difference v0.6
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6David Pasek
 
C* Summit 2013: How Not to Use Cassandra by Axel Liljencrantz
C* Summit 2013: How Not to Use Cassandra by Axel LiljencrantzC* Summit 2013: How Not to Use Cassandra by Axel Liljencrantz
C* Summit 2013: How Not to Use Cassandra by Axel LiljencrantzDataStax Academy
 
Xfs file system for linux
Xfs file system for linuxXfs file system for linux
Xfs file system for linuxAjay Sood
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
High Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go AssemblyHigh Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go AssemblyMinio
 
Linux command ppt
Linux command pptLinux command ppt
Linux command pptkalyanineve
 
Cloud Migration Paths: Kubernetes, IaaS, or DBaaS
Cloud Migration Paths: Kubernetes, IaaS, or DBaaSCloud Migration Paths: Kubernetes, IaaS, or DBaaS
Cloud Migration Paths: Kubernetes, IaaS, or DBaaSEDB
 
System design for video streaming service
System design for video streaming serviceSystem design for video streaming service
System design for video streaming serviceNirmik Kale
 
Inside the InfluxDB storage engine
Inside the InfluxDB storage engineInside the InfluxDB storage engine
Inside the InfluxDB storage engineInfluxData
 
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis Labs
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis LabsRedis + Kafka = Performance at Scale | Julien Ruaux, Redis Labs
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis LabsHostedbyConfluent
 
An Overview of Apache Cassandra
An Overview of Apache CassandraAn Overview of Apache Cassandra
An Overview of Apache CassandraDataStax
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker, Inc.
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisArnab Mitra
 

What's hot (20)

A Comparison of EDB Postgres to Self-Supported PostgreSQL
A Comparison of EDB Postgres to Self-Supported PostgreSQLA Comparison of EDB Postgres to Self-Supported PostgreSQL
A Comparison of EDB Postgres to Self-Supported PostgreSQL
 
Windows virtual desktop l100 presentation
Windows virtual desktop l100 presentationWindows virtual desktop l100 presentation
Windows virtual desktop l100 presentation
 
Linux Administration
Linux AdministrationLinux Administration
Linux Administration
 
Provisioning and automating high availability postgres on aws ec2 (1)
Provisioning and automating high availability postgres on aws ec2 (1)Provisioning and automating high availability postgres on aws ec2 (1)
Provisioning and automating high availability postgres on aws ec2 (1)
 
PostgreSQL for Oracle Developers and DBA's
PostgreSQL for Oracle Developers and DBA'sPostgreSQL for Oracle Developers and DBA's
PostgreSQL for Oracle Developers and DBA's
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6VMware ESXi - Intel and Qlogic NIC throughput difference v0.6
VMware ESXi - Intel and Qlogic NIC throughput difference v0.6
 
C* Summit 2013: How Not to Use Cassandra by Axel Liljencrantz
C* Summit 2013: How Not to Use Cassandra by Axel LiljencrantzC* Summit 2013: How Not to Use Cassandra by Axel Liljencrantz
C* Summit 2013: How Not to Use Cassandra by Axel Liljencrantz
 
Xfs file system for linux
Xfs file system for linuxXfs file system for linux
Xfs file system for linux
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
High Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go AssemblyHigh Performance Scaling Techniques in Golang Using Go Assembly
High Performance Scaling Techniques in Golang Using Go Assembly
 
Docker internals
Docker internalsDocker internals
Docker internals
 
Linux command ppt
Linux command pptLinux command ppt
Linux command ppt
 
Cloud Migration Paths: Kubernetes, IaaS, or DBaaS
Cloud Migration Paths: Kubernetes, IaaS, or DBaaSCloud Migration Paths: Kubernetes, IaaS, or DBaaS
Cloud Migration Paths: Kubernetes, IaaS, or DBaaS
 
System design for video streaming service
System design for video streaming serviceSystem design for video streaming service
System design for video streaming service
 
Inside the InfluxDB storage engine
Inside the InfluxDB storage engineInside the InfluxDB storage engine
Inside the InfluxDB storage engine
 
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis Labs
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis LabsRedis + Kafka = Performance at Scale | Julien Ruaux, Redis Labs
Redis + Kafka = Performance at Scale | Julien Ruaux, Redis Labs
 
An Overview of Apache Cassandra
An Overview of Apache CassandraAn Overview of Apache Cassandra
An Overview of Apache Cassandra
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 

Similar to KCD Munich 2023 - Demystifying Container Images Understanding Multi-Architecture, Manifests, IDs, and Digests

Jump into Squeak - Integrate Squeak projects with Docker & Github
Jump into Squeak - Integrate Squeak projects with Docker & GithubJump into Squeak - Integrate Squeak projects with Docker & Github
Jump into Squeak - Integrate Squeak projects with Docker & Githubhubx
 
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...Mihai Criveti
 
Présentation de Docker
Présentation de DockerPrésentation de Docker
Présentation de DockerProto204
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanMihai Criveti
 
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...Christy Norman
 
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...Docker, Inc.
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 augVincent De Smet
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker皓鈞 張
 
How abusing the Docker API led to remote code execution same origin bypass an...
How abusing the Docker API led to remote code execution same origin bypass an...How abusing the Docker API led to remote code execution same origin bypass an...
How abusing the Docker API led to remote code execution same origin bypass an...Aqua Security
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformniyof97
 
Making Security Invisible
Making Security InvisibleMaking Security Invisible
Making Security InvisibleJ On The Beach
 
containerD
containerDcontainerD
containerDstrikr .
 
Creating docker custom image
Creating docker custom imageCreating docker custom image
Creating docker custom imaget lc
 
Creating docker custom image
Creating docker custom imageCreating docker custom image
Creating docker custom imaget lc
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Bo-Yi Wu
 

Similar to KCD Munich 2023 - Demystifying Container Images Understanding Multi-Architecture, Manifests, IDs, and Digests (20)

Jump into Squeak - Integrate Squeak projects with Docker & Github
Jump into Squeak - Integrate Squeak projects with Docker & GithubJump into Squeak - Integrate Squeak projects with Docker & Github
Jump into Squeak - Integrate Squeak projects with Docker & Github
 
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...
Kubernetes Story - Day 2: Quay.io Container Registry for Publishing, Building...
 
Présentation de Docker
Présentation de DockerPrésentation de Docker
Présentation de Docker
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with Podman
 
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
 
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
How abusing the Docker API led to remote code execution same origin bypass an...
How abusing the Docker API led to remote code execution same origin bypass an...How abusing the Docker API led to remote code execution same origin bypass an...
How abusing the Docker API led to remote code execution same origin bypass an...
 
Kubernetes 1001
Kubernetes 1001Kubernetes 1001
Kubernetes 1001
 
Securité des container
Securité des containerSecurité des container
Securité des container
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
introduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraformintroduction-infra-as-a-code using terraform
introduction-infra-as-a-code using terraform
 
Making Security Invisible
Making Security InvisibleMaking Security Invisible
Making Security Invisible
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Docker practice
Docker practiceDocker practice
Docker practice
 
containerD
containerDcontainerD
containerD
 
Creating docker custom image
Creating docker custom imageCreating docker custom image
Creating docker custom image
 
Creating docker custom image
Creating docker custom imageCreating docker custom image
Creating docker custom image
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 

Recently uploaded

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 

Recently uploaded (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

KCD Munich 2023 - Demystifying Container Images Understanding Multi-Architecture, Manifests, IDs, and Digests

  • 1. SPONSORS Speaker: Robert Bohne Company: Demystifying Container Images: Understanding Multi-Architecture, Manifests, IDs, and Digests
  • 2. 3 Build Where do we start? Demystifying Container Images: Understanding Multi-Architecture, Manifests, IDs, and Digests Registry Run
  • 3. 4 Build Container build Where do we start? Registry Container Registry Run Container Runtime
  • 4. 5 Build Container build Build Where do we start? Registry Container Registry Run Container Runtime Container Image
  • 5. 6 Build Container build Push to Registry Where do we start? Registry Container Registry Run Container Runtime Container Image Container Image Push
  • 6. 7 Build Container build Pull Where do we start? Registry Container Registry Run Container Runtime Container Image Container Image Container Image Push Pull
  • 7. 8 Build Container build Run Where do we start? Registry Container Registry Run Container Runtime Container (Process) Container Image Container Image Container Image Push Pull
  • 8. 9 Container build Tools? Container Registry Container Runtime Push Pull
  • 12. 13 Source: https://opencontainers.org/ https://github.com/opencontainers/ Container build Container build FROM registry.access.redhat.com/ubi9/ubi-micro AS runner CMD ["uname","-om" ] Containerfile $ buildah bud -t quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) . Command line Container Image Container Image Manifest Configuration Filesystem layers
  • 13. Container Image for amd64/x86_64 14 Container Image (we are still in the runtime) Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8
  • 14. 15 Container Image Manifest Container Image Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8 { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "digest": "sha256:f89495e3e0be655cdd4abc0048fbd3974658e9c07296ff4cdcf5e4e3226edc41", "size": 4236 }, "layers": [ { "mediaType": "application/vnd.oci.image.layer.v1.tar", "digest": "sha256:e54dc53d0edbbc96d3307fdea7bc1ed433d9083a1aab033dc3b38fd8b4fb165a", "size": 26090496 }, { "mediaType": "application/vnd.oci.image.layer.v1.tar", "digest": "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef", "size": 1024 } ], "annotations": { "org.opencontainers.image.base.digest": "sha256:18a01cb5c53560ca2295e8a218454fe33b330ad6fac0d0ea43a513cd93787b7f", "org.opencontainers.image.base.name": "registry.access.redhat.com/ubi9/ubi-micro:latest" } } Manifest
  • 15. 16 Container Image Configuration Container Image Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8 { "created": "2023-07-14T11:49:23.062774594Z", "architecture": "amd64", "os": "linux", "config": { "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": ["uname","-om"], "Labels": { "architecture": "x86_64", "build-date": "2023-06-15T11:05:34", [...snipped...] } }, "rootfs": { "type": "layers", "diff_ids": [ "sha256:e54dc53d0edbbc96d3307fdea7bc1ed433d9083a1aab033dc3b38fd8b4fb165a", "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" ] }, "history": [ [...snipped...] ] } Configuration
  • 16. 17 Container Image (we are still in the runtime) Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8 [root@centos-amd64 multi-arch]# podman images --digests --no-trunc REPOSITORY TAG DIGEST IMAGE ID quay.io/openshift-examples/multi-arch kcdmunich2023-x86_64 sha256:d9b46d23c9f8 sha256:f89495e3e0be … Command line
  • 17. Blob - sha256:f89495e3e0be 18 Container Image (we are still in the runtime) Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8 [root@centos-amd64 multi-arch]# podman images --digests --no-trunc REPOSITORY TAG DIGEST IMAGE ID quay.io/openshift-examples/multi-arch kcdmunich2023-x86_64 sha256:d9b46d23c9f8 sha256:f89495e3e0be … Blob - sha256:f89495e3e0be Command line
  • 18. 19 Source: https://github.com/containers Container build Push to Container Registry Container Registry Push
  • 19. 20 Push the Container Image [root@centos-amd64 multi-arch]# podman push quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64 Getting image source signatures Copying blob 5f70bf18a086 done Copying blob e54dc53d0edb done Copying config f89495e3e0 done Writing manifest to image destination Storing signatures Command line Quay.io webui 😱
  • 20. 21 Container Image (pushed) Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60
  • 21. Registry Runtime 22 Container Image Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60 Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8
  • 22. Registry Runtime 23 Container Image Manifest from Container Registry Container Image Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60 Blob - sha256:f89495e3e0be Blob - sha256:e54dc53d0edb Blob - sha256:5f70bf18a086 Blob - sha256:d9b46d23c9f8 { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { "mediaType": "application/vnd.oci.image.config.v1+json", "digest": "sha256:f89495e3e0be655cdd4abc0048fbd3974658e9c07296ff4cdcf5e4e3226edc41", "size": 4236 }, "layers": [ { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "digest": "sha256:940034fae708a1fe0ee6ff6929fffd48c235a6da185812ea4b31bab58815b6cf", "size": 26090496 }, { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", "digest": "sha256:bd9ddc54bea929a22b334e73e026d4136e5b73f5cc29942896c72e4ece69b13d", "size": 1024 } ], "annotations": { "org.opencontainers.image.base.digest": "sha256:18a01cb5c53560ca2295e8a218454fe33b330ad6fac0d0ea43a513cd93787b7f", "org.opencontainers.image.base.name": "registry.access.redhat.com/ubi9/ubi-micro:latest" } } Manifest
  • 23. 24 Container Image (pushed) Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60
  • 24. 25 Source: https://github.com/containers Container build Let’s run the Container Image Container Registry Container Runtime Push Pull
  • 25. 26 Run the Container Image on amd64/x86_64 [root@centos-amd64-run ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64... Getting image source signatures Copying blob bd9ddc54bea9 done Copying blob 940034fae708 done Copying config f89495e3e0 done Writing manifest to image destination Storing signatures x86_64 GNU/Linux [root@centos-amd64-run ~]# Command line 👏 ✅ amd64/x86_64 container image running ✅ application ‘uname -om’
  • 26. 27 Run the Container Image on ARM64 [root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64... Getting image source signatures Copying blob 940034fae708 skipped: already exists Copying blob bd9ddc54bea9 done Copying config f89495e3e0 done Writing manifest to image destination Storing signatures WARNING: image platform (linux/amd64) does not match the expected platform (linux/arm64) {"msg":"exec container process `/usr/bin/uname`: Exec format error","level":"error","time":"2023-07-14T13:49:01.044372Z"} Command line 😠 📛 amd64/x86_64 container image running 📛 application ‘uname -om’
  • 27. 28 Let’s build, push and run an ARM64 image [root@centos-arm64 multi-arch]# buildah bud -t quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) . STEP 1/2: FROM registry.access.redhat.com/ubi9/ubi-micro AS runner Trying to pull registry.access.redhat.com/ubi9/ubi-micro:latest... Getting image source signatures Checking if image destination supports signatures Copying blob 5c3f8435842b done Copying config e2742eb12e done Writing manifest to image destination Storing signatures STEP 2/2: CMD ["uname","-om" ] COMMIT quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64 Getting image source signatures Copying blob 9eda08853b4a skipped: already exists Copying blob 5f70bf18a086 skipped: already exists Copying config 05447a1ff2 done Writing manifest to image destination Storing signatures --> 05447a1ff2eb Successfully tagged quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64 05447a1ff2eb966612bfbebd8f78f61ae7d0ffba09ce4dd9b4aaf8f384a75f21 Command line
  • 28. 29 Let’s build, push and run an ARM64 image [root@centos-arm64 multi-arch]# buildah push quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) Getting image source signatures Copying blob 9eda08853b4a done Copying blob bd9ddc54bea9 skipped: already exists Copying config 05447a1ff2 done Writing manifest to image destination Storing signatures Command line Quay.io webui
  • 29. 30 Container Image (pushed) Container Image for arm64/aarch64 Manifest Configuration Filesystem layers Blob - sha256:05447a1ff2eb Blob - sha256:5c3f8435842b Blob - sha256:bd9ddc54bea9 Blob - sha256:b2be25b1c834 👉 Same structure as amd64/x86_64 👉 Manifest sha256 and compression of layers changed between build and push as well!
  • 30. 31 Let’s build, push and run an ARM64 image [root@centos-arm64 multi-arch]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-$(uname -m) aarch64 GNU/Linux Command line 👏 ✅ arm64 container image running ✅ application ‘uname -om’
  • 31. 32 Run the Container Image on amd64/X86_64 [root@centos-amd64-run ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64... Getting image source signatures Copying blob bd9ddc54bea9 skipped: already exists Copying blob 5c3f8435842b done Copying config 05447a1ff2 done Writing manifest to image destination Storing signatures WARNING: image platform (linux/arm64) does not match the expected platform (linux/amd64) {"msg":"exec container process `/usr/bin/uname`: Exec format error","level":"error","time":"2023-07-14T14:04:50.249825Z"} Command line 😠 📛 aarch64 container image running 📛 application ‘uname -om’
  • 32. 33 Let’s create a Multi-Arch Container Image Container Image for arm64/aarch64 Manifest Configuration Filesystem layers Blob - sha256:05447a1ff2eb Blob - sha256:5c3f8435842b Blob - sha256:b2be25b1c834 Blob - sha256:bd9ddc54bea9 Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60 Manifest Index “Image” / Fat Manifest arm64 amd64
  • 33. Let’s create a Multi-Arch Container Image [root@centos-amd64 multi-arch]# buildah manifest create manifestlist/v1 74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f [root@centos-amd64 multi-arch]# buildah manifest add manifestlist/v1 quay.io/openshift-examples/multi-arch:kcdmunich2023-aarch64 74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f: sha256:b2be25b1c8344d0f6a028a9b50d2e42ba25451c2d19fef3635dbd131d005bbf4 [root@centos-amd64 multi-arch]# buildah manifest add manifestlist/v1 quay.io/openshift-examples/multi-arch:kcdmunich2023-x86_64 74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f: sha256:d3b7a48ede6086835f0b97a82f9baaaa2d566072aec7e209d4341eb29566fafb [root@centos-amd64 multi-arch]# buildah manifest push manifestlist/v1 docker://quay.io/openshift-examples/multi-arch:kcdmunich2023 Getting image list signatures Copying 0 of 2 images in list Writing manifest list to image destination Storing list signatures [root@centos-amd64 multi-arch]# buildah manifest rm manifestlist/v1 untagged: localhost/manifestlist/v1:latest 74fab59072d748f3a8bdb88d3248d4372f8c21440732038de7b4e88888373b3f Command line
  • 34. Manifest 35 Let’s create a Multi-Arch Container Image Container Image for arm64/aarch64 Manifest Configuration Filesystem layers Blob - sha256:05447a1ff2eb Blob - sha256:5c3f8435842b Blob - sha256:bd9ddc54bea9 Blob - sha256:b2be25b1c834 Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60 Index “Image” / Fat Manifest arm64 amd64 Blob - sha256:8a2f1bc89213
  • 35. 36 Let’s create a Multi-Arch Container Image { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:b2be25b1c8344d0f6a028a9b50d2e42ba25451c2d19fef3635dbd131d005bbf4", "size": 776, "platform": { "architecture": "arm64", "os": "linux" } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:d3b7a48ede6086835f0b97a82f9baaaa2d566072aec7e209d4341eb29566fafb", "size": 776, "platform": { “architecture": "amd64", "os": "linux" } } ] } Manifest
  • 36. 37 Run the Container Image [root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023... Getting image source signatures Copying blob bd9ddc54bea9 skipped: already exists Copying blob 5c3f8435842b skipped: already exists Copying config 05447a1ff2 done Writing manifest to image destination Storing signatures aarch64 GNU/Linux [root@centos-arm64 ~]# Command line 👏 [root@centos-amd64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023... Getting image source signatures Copying blob bd9ddc54bea9 skipped: already exists Copying blob 940034fae708 skipped: already exists Copying config f89495e3e0 done Writing manifest to image destination Storing signatures x86_64 GNU/Linux [root@centos-amd64 ~]# Command line 👏
  • 37. 38 Run the Container Image [root@centos-arm64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023... Getting image source signatures Copying blob bd9ddc54bea9 skipped: already exists Copying blob 5c3f8435842b skipped: already exists Copying config 05447a1ff2 done Writing manifest to image destination Storing signatures aarch64 GNU/Linux [root@centos-arm64 ~]# Command line 👏 [root@centos-amd64 ~]# podman run -ti --rm quay.io/openshift-examples/multi-arch:kcdmunich2023 Trying to pull quay.io/openshift-examples/multi-arch:kcdmunich2023... Getting image source signatures Copying blob bd9ddc54bea9 skipped: already exists Copying blob 940034fae708 skipped: already exists Copying config f89495e3e0 done Writing manifest to image destination Storing signatures x86_64 GNU/Linux [root@centos-amd64 ~]# Command line 👏 Container Runtime select Container Image based on ● platform.architecture - REQUIRED, GOARCH ● platform.os - REQUIRED, GOOS ● platform.os.version - optional, windows only.
  • 38. Manifest 39 Let’s create a Multi-Arch Container Image Container Image for arm64/aarch64 Manifest Configuration Filesystem layers Blob - sha256:05447a1ff2eb Blob - sha256:5c3f8435842b Blob - sha256:bd9ddc54bea9 Blob - sha256:b2be25b1c834 Container Image for amd64/x86_64 Manifest Configuration Filesystem layers Blob - sha256:f89495e3e0be Blob - sha256:940034fae708 Blob - sha256:bd9ddc54bea9 Blob - sha256:d3b7a48ede60 Index “Image” / Fat Manifest arm64 amd64 Blob - sha256:8a2f1bc89213
  • 40. 41 { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:57f1b9ae0b74d98ba7a8e70fa00758712f92ed3c06b3beda51c5c9ba93ba65e7", "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:48f4a90f0c61ed8727c034e5336046949052376bd4ae9f9d538c6f8a2dd8c571", "platform": { "architecture": "arm64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:0037d35ed71250996928d5db1f4d4761f810b34d0bfee0202c7e3a6394897502", "platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.17763.2928" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:7d9065900b046d7612ef131da7444114109db252a43de212277ffa51fe738169", "platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.20348.707" } } ] } Multi-Arch, Multi-OS, Multi-OS-Version Container Image? mcr.microsoft.com/oss/kubernetes/pause:3.9 Manifest
  • 41. 43 Blog post Slides Background info Questions? Thank you!