Gå til indhold
atlas

Container-image

Den frosne, skrivebeskyttede pakke med et program og dets filer, som ens containere startes ud fra.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

En skrivebeskyttet pakke af lag med filer oven på hinanden plus indstillinger - hvilket program der skal startes, og hvilke porte det lytter på - som typisk ligger i et container-register og bruges som skabelon til at starte containere.

Forklaret enkelt

Som en kageopskrift med ingredienserne allerede afvejet - hver kage bagt ud fra den bliver ens, og selve opskriften bliver aldrig spist.

I praksis

Før et nyt image af en regions patientportal må komme i drift, scanner pipelinen det for kendte sårbarheder og afviser det, fordi det er bygget på en gammel base med et bibliotek, der mangler sikkerhedsopdateringer.

Hvorfor det betyder noget

Hver container arver alt, hvad der ligger i dens image - også gamle fejl, skjult malware eller glemte adgangskoder - så tillid til, hvor images kommer fra, er et spørgsmål om forsyningskæden.

Teknisk uddybning

Et OCI-image er en lille graf af indholdsadresserede blobs. Øverst ligger et image index (et "fat manifest" med ét manifest per platform, fx linux/amd64 og linux/arm64); hvert manifest peger på én config-blob og en ordnet liste af lag-blobs; hver reference er en deskriptor med medietype, størrelse og digest (normalt sha256) for målet. Fordi manifestets egen digest er en hash over deskriptorerne, låser en reference som navn@sha256:… de præcise bytes i hvert lag, mens et tag som :2.4 eller :latest blot er en foranderlig peger, som registryet kan flytte.

Hvert lag er et tar-arkiv (typisk komprimeret med gzip eller zstd), der beskriver et sæt ændringer i filsystemet; sletninger registreres som whiteout-filer (.wh.navn), så en fil, der "fjernes" i et senere lag, stadig findes i det tidligere. Derfor kan en hemmelighed, der kopieres ind i ét Dockerfile-trin og slettes i det næste, stadig trækkes ud af imaget. Config-blobben indeholder runtime-standarderne - Entrypoint, Cmd, Env, User, WorkingDir, ExposedPorts, labels - plus den ordnede liste over ukomprimerede lag-digests (diff_ids) og en historik. Ved kørsel stables lagene med overlayfs, og et skrivbart lag lægges ovenpå; selve imaget ændres aldrig.

Images bygges fra en Dockerfile/Containerfile med BuildKit eller Buildah eller uden dæmon med værktøjer som ko, Jib eller Bazel-regler. God praksis er multi-stage builds, så compilere ikke kommer med i det endelige image, et minimalt base-image (distroless, Alpine, Chainguard-lignende eller scratch), en USER, der ikke er root, og at base-imaget låses via digest. Reproducerbare builds (faste tidsstempler via SOURCE_DATE_EPOCH, sorteret filrækkefølge) lader uafhængige parter genbygge og sammenligne digests. OCI's image- og distributionsspecifikationer i version 1.1 tilføjede artifactType og et subject-felt, så signaturer, SBOM'er og attestationer kan gemmes i registryet som selvstændige artefakter, der henviser til et images digest.

Sikkerhedsarbejdet med images drejer sig om tre spørgsmål: hvad er der indeni (SBOM-generering med Syft eller Trivy og matchning af sårbarheder mod styresystemets pakkedatabase og sprogenes lockfiler), hvem byggede det (signaturer og SLSA-provenance, fx via cosign), og lukker klyngen kun godkendte digests ind (admission-politik). Scannere, der kun læser styresystemets pakkemetadata, overser statisk linkede binærer og vendoreret kode, og en ren scanning i dag siger intet om CVE'er, der offentliggøres i morgen, så images skal genscannes løbende og genbygges jævnligt. Et image forholder sig til en container, som en klasse forholder sig til en instans, og adskiller sig fra et VM-image ved ikke at indeholde nogen kerne.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Filsystem
  2. →Kerne (kernel)
  3. →Styresystem
  4. →Proces
  5. →Container
  6. →Container-image

Relationer

Forudsætter
ContainerFilsystem
Bruges sammen med
Softwarestykliste (SBOM)

Kilder og videre læsning

Standarder og officielle tekster

  • NIST SP 800-190 - Application Container Security Guide · NIST

Officiel dokumentation

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Nævnt i

Test dig selv

Indlæser…

Atlas er i beta.