Voor alle afnemers van OpenShift bieden wij bij NPO Hosting ook een Image Registry aan voor het opslaan van Docker Images. Dit Registry bied een aantal voordelen:
Op deze pagina leggen we uit hoe deze gebruikt kan worden.
Ons registry is gebaseerd op het Open Source project Harbor en omvat een aantal functionaliteiten:
Het registry is beschikbaar via https://registry.npohosting.nl
Wanneer je gebruik wilt gaan maken van het Registry moet je eerst inloggen op https://registry.npohosting.nl. Hier kan je gewoon inloggen met je SSO account. Eenmaal ingelogd moet een medewerker van Hosting & Streaming het account nog toevoegen aan de juiste groepen zodat ook werkelijk Repository's beschikbaar zijn.
Voor elke afnemer wordt een Repository aanmaken. Binnen deze Repository kan je zelf verschillende Images plaatsen. Voor elk Repository hebben we een aantal dingen standaard geconfigureerd:
Eenmaal ingelogged zie je een overzicht van alle “Projects” waar je toegang tot hebt. Dat zijn een aantal publieke projecten, en natuurlijk je eigen Project. In deze documentatie gebruik ik het hens Project als voorbeeld.
Als je eenmaal bent ingelogged kan je kiezen om naar je Project te gaan, je krijgt dan deze pagina te zien:
Op deze pagina zie je alle Images die je in je Project hebt staan (in dit voorbeeld alleen een nginx image). Je ziet ook hoeveel “Artifacts” een Image heeft. Artifacts verwijzen in dit geval naar werkelijke Images. Verder kan je zien hoeveel “Pulls” er zijn geweest en wanneer het image voor het laatst is aangepast.
Als je vervolgens op het Image klikt, krijg je een pagina met een overzicht van “Artifacts”:
Je ziet de volgende kolommen:
Als je lokaal, bijvoorbeeld met Docker, Images wil Pushen en Pullen naar je Repository, dan moet je eerst inloggen. Daarvoor moet je eerst naar de Web UI en inloggen met de SSO, dan kan je rechtsboven op je naam klikken en vervolgens kiezen voor “User Profile”:
Vervolgens wordt onderstaande venster getoond:
Uit dit venster heb je de “Username” en “CLI secret” nodig om te kunnen inloggen met Docker:
docker login -u Tim_Sterk registry.npohosting.nl Password: <voer hier het "CLI secret" in> Login Succeeded
Vervolgens kan je nu een Docker image gaan bouwen en Pushen. Voor dit voorbeeld heb ik een simpele Dockerfile gemaakt met Nginx:
FROM nginx:alpine
Deze kan ik nu bouwen en daarna Pushen:
docker build . -t registry.npohosting.nl/hens/nginx:alpine [+] Building 0.2s (5/5) FINISHED docker:desktop-linux => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 55B 0.0s => [internal] load metadata for docker.io/library/nginx:alpine 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/1] FROM docker.io/library/nginx:alpine 0.1s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:de39847e78f8b36e9a1c5c982a7c5297c93c81cd668c445d963cbff5e3a7cb95 0.0s => => naming to registry-test.npohosting.nl/hens/nginx:alping 0.0s What's Next? View a summary of image vulnerabilities and recommendations → docker scout quickview
Wanneer die gebouwd is, kan ik hem Pushen:
docker push registry-test.npohosting.nl/hens/nginx:alpine The push refers to repository [registry-test.npohosting.nl/hens/nginx] a34b395c0ca3: Pushed 5e728486380e: Pushed b968c967e155: Pushed 92ef9174e989: Pushed 28c7b3c0b176: Pushed fbed1f6990ee: Pushed dd731ddf52be: Pushed 9fe9a137fd00: Pushed alpine: digest: sha256:ddfea4c6a445bbb043aed9b6b8ae9ab7b858ac01728c331cf3a465e2abb949a7 size: 1989
Je kan hem nu ook in de Web UI terugvinden:
Veel afnemers maken gebruik van BuildConfig's in OpenShift om hun images te bouwen. Standaard worden de images gepushed naar de interne registry van OpenShift, maar met CHP5 is het aan te raden deze naar het NPO Hosting Registry te sturen. Hiervoor moet je de volgende stappen ondernemen:
oc create secret docker-registry npohosting-harbor --docker-server=registry.npohosting.nl --docker-username=<robot account> --docker-password=<token>
oc secrets link default npohosting-harbor --for=pull,mount oc secrets link builder npohosting-harbor --for=pull,mount
output:
to:
kind: ImageStreamTag
name: demo-app:latest
output:
to:
kind: DockerImage
name: registry.npohosting.nl/hens/demo-app:latest
oc get imagestream demo-app NAME IMAGE REPOSITORY TAGS UPDATED demo-app openshift-image-registry.apps.cluster.chp4.io/hens-buildconfig-ext-registry/demo-app latest About a minute ago
spec: lookupPolicy: local: false
tags: - annotations: null from: kind: DockerImage name: registry.npohosting.nl/hens/demo-app:latest importPolicy: scheduled: true name: latest referencePolicy: type: Source
Met deze manier van werken is het wel nodig dat de ImageStream verteld wordt dat er een nieuw Image klaar staat in het Registry. Dit kan je automatisch laten doen met:
importPolicy: scheduled: true
Dit kan alleen 15/20 minuten duren. Je kan dit daarnaast ook met de hand starten:
oc import-image demo-app
Na de import wordt het image op de normale manier verder uitgerold.