Table of Contents

NPO Hosting Image Registry

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.

Harbor

Ons registry is gebaseerd op het Open Source project Harbor en omvat een aantal functionaliteiten:

Het registry is beschikbaar via https://registry.npohosting.nl

Eerste keer inloggen

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.

Registry Web UI

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:

Push & Pull van Images

Lokaal

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:

Vanuit OpenShift

Voorbeeld met een BuildConfig

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.