
Container Registries
Wat je ook met containers van plan bent, je ontkomt niet aan gebruik van een container registry. In dit blog zetten we uiteen wat een registry precies is, hoe je een registry gebruikt en hoe je zelf lokaal een registry kunt opzetten om mee te experimenteren.
Wat is een container registry?
Simpel gesteld kan een registry worden gezien als software die fungeert als slimme en goed geordende opslagplaats voor container images. Er zijn verschillende oplossingen om gebruik te maken van een container registry. Je kunt er zelf eentje lokaal draaien, bijvoorbeeld met Docker Registry of Harbor. Ook zijn er platformen zoals Docker Hub, Quay en GitHub Container Registry die een registry hosten om jouw images remote op te slaan.
Als laatste bieden ook cloud-providers zoals Microsoft, Amazon en Google een container registry als dienst aan, waarmee je jouw images in hun cloud platform kunt parkeren.
De registry zelf lijkt een beetje op een archiefkast waar, keurig gelabeld en geïndexeerd, documenten of andere voorwerpen in zijn opgeslagen. Zo zijn ze altijd eenduidig terug te vinden. Natuurlijk wil je niet dat zomaar iedereen bij jouw container images kan, net zoals je ook niet wilt dat iedereen zomaar in de archiefkast kan rondneuzen. Daarom zijn er diverse mogelijkheden om een container registry te beveiligen.
OCI
Alle bekende container registries zijn bruikbaar met alle gangbare container-tooling zoals Docker, Podman, Kaniko en Buildah. Dit wordt geborgd door de standaarden van het Open Container Initiative: OCI. Deze standaard, geïnitieerd door Docker, bestaat uit 3 delen, waarvan er 1 deel speciaal gericht is op de specificaties van registries (Distribution Specification). Alle container registries die OCI-compatibel zijn, werken op dezelfde manier en zijn dus met alle OCI-compatibele container-tools bruikbaar. Wel zo makkelijk en natuurlijk perfect passend bij het hele idee achter containers!
Authenticatie & encryptie
Voor sommige images is het helemaal niet erg dat de hele wereld erbij kan. In veel registries / registry-software kun je daarom kiezen of een image openbaar beschikbaar mag zijn. Voor deze images hoef je je dus niet aan te melden of in te loggen: je kunt ze zonder authenticatie downloaden. Voor de meeste images geldt dat dit onwenselijk is. Bijvoorbeeld omdat er een specifieke applicatie of configuratie in het image aanwezig is die niet in de verkeerde handen mag komen. Dit soort images sla je op in een private registry.
Bij online registries is het vaak alleen mogelijk om images private te publiceren door te betalen. Draai je een eigen registry met bijvoorbeeld Harbor of Docker Registry dan kun je jouw registry configureren met gebruikers en is authenticatie vereist voordat iemand een container image kan downloaden. Wanneer je besluit om een lokale registry te gaan bouwen dan is het ook belangrijk om te zorgen dat de verbinding van/naar de registry versleuteld is middels TLS. Dit hoeft niets te kosten, want technisch kan dit prima met een self-signed certificate of Let's Encrypt worden gerealiseerd.
Push & pull
We hebben het al een paar keer gehad over downloaden maar in container-jargon wordt dit pull genoemd. Zie dit alsof je het container image uit de registry trekt. Of metaforisch: je trekt een document uit de la van het archief. Dat kan best even trekken zijn als de la goed vol zit.
Het uploaden van een image naar een registry wordt push genoemd. Daarmee duw je het image naar de registry toe. Of, om in de metafoor te blijven, je duwt een document in een la van de archiefkast.
Wanneer je gebruik maakt van een beveiligde registry dan zul je, voordat je kunt pullen of pushen, eerst moeten aanmelden. Dit kan meestal met een login subcommando (bijv. bij docker
of podman
). Hierbij dien je je gebruikersnaam en wachtwoord op te geven.
De exacte plek waar je je container image ophaalt of neerzet wordt bepaald aan de hand van tags. De uiteindelijke locatie heeft wel wat weg van de URL van een website en is als volgt opgebouwd:
registrynaam(optioneel: poortnummer)/gebruikersnaam(optioneel)/image:versie_van_image
Willen we bijvoorbeeld via Red Hat's Quay een image pullen en de gebruikersnaam is guru, dan duiken we versie 1.3 van het container image genaamd hello_world als volgt op:
quay.io/guru/hello_world:1.3
Wil je een container image naar de registry pushen dan doe je dat op een zelfde manier:
# tag eerst het image.
# daarmee bepaal je de bestemming waar
# het image heen wordt gepusht
docker tag hello_world quay.io/guru/hello_world:1.3
# push het image naar de gewenste locatie
docker push quay.io/guru/hello_world:1.3
bash
Lokaal draaien
Om praktijkervaring op te doen met registries kan het handig zijn om lokaal op je computer te oefenen. Harbor en Docker Registry zijn open source software en hiervoor beiden erg geschikt. Wie het eenvoudig wil houden kan het beste voor Docker Registry kiezen, wie toe is aan een meer uitgebreide en complexere oplossing kan zich uitleven met Harbor.
Harbor lokaal draaien vraagt om een configuratiebestand en Docker Compose, maar Docker Registry is met slechts één commando aan te slingeren (ps: de meeste container registries draaien standaard op poort 5000):
# start de registry (detached)
docker run -d -p 5000:5000 --name mijn-registry registry:3.0.0
# tag je image (in dit geval een standaard image van Alpine)
docker tag alpine localhost:5000/mijn-alpine:1.0
# push het image naar je lokale registry
docker push localhost:5000/mijn-alpine:1.0
# check of het image er staat (met curl)
curl -s http://localhost:5000/v2/_catalog
# gooi je lokale image weg
docker image rm localhost:5000/mijn-alpine:1.0
# bevestig dat het image weg is
docker images
# pull het image uit de registry
docker pull localhost:5000/mijn-alpine:1.0
# bevestig dat het image bestaat
docker images
bash
Tips
Je kunt met curl nog meer leuke dingen doen in combinatie met de API van de docker registry. Zo kun je bijvoorbeeld verifiëren of een specifieke tag aanwezig is: curl -s http://localhost:5000/v2/mijn-alpine/tags/list
Wanneer je werkt met een private registry, ga dan zorgvuldig met je credentials voor authenticatie om. Gebruik bijvoorbeeld een configuratiebestand met Podman of Docker.
- Docker:
~/.docker/config.json
- Podman werkt standaard vanuit
~/.config/containers/auth.json
Je kunt met de --authfile
vlag ook het pad van een ander bestand opgeven.
Tot slot
Zoals we dit blog al begonnen: je kunt weinig met containers zonder een container registry. In basis werken ze gelukkig allemaal hetzelfde, mits ze zich netjes aan de OCI-standaard houden. We hopen natuurlijk dat je door dit blog geïnspireerd bent om zelf aan de slag te gaan en lokaal een registry op te zetten (en stuk te maken, zodat je ervan kunt leren). Wil je nog veel meer over containers en het ecosysteem daar omheen leren? Check dan onze Docker Fundamentals training.
$ blog-details
- $ categorie: Docker
- $ tools: Docker, Podman, Linux
- $ date: 2025-05-20T21:00:42 CET
- $ trainingen:
Docker Fundamentals