Privat Docker-register på Ubuntu 22.04: Komplett guide

Docker har etablert seg som en ledende plattform for å containerisere applikasjoner. Denne teknologien tilbyr et konsistent miljø for applikasjonskjøring, uavhengig av den underliggende infrastrukturen. For å håndtere og lagre Docker-bilder på en sikker måte, er det en fordel å implementere et privat Docker-register. Dette gir deg større grad av kontroll og forbedret sikkerhet over dine lagrede bilder.

Denne guiden vil lede deg gjennom prosessen med å sette opp et privat Docker-register på Ubuntu 22.04. Vi vil bruke Docker Distribution (ofte bare kalt Distribution) som en enkel og åpen kildekode-løsning for dette formålet.

Forutsetninger

Før du begynner, sørg for at følgende er på plass:

  • En server med Ubuntu 22.04 installert.
  • Docker-motoren er installert og kjører.
  • Et domenenavn som er koblet til serverens IP-adresse.

Konfigurere Docker Distribution

1. Installere Docker Distribution

Start med å installere Docker Distribution ved å utføre følgende kommandoer i terminalen:


sudo apt update
sudo apt install docker-distribution

2. Opprette et register-lager

Deretter må vi opprette et lagringsområde for registeret. Dette gjøres med følgende kommandoer:


sudo mkdir /var/lib/registry
sudo chown 1000:1000 /var/lib/registry

3. Starte Distribution-tjenesten

For å starte selve Distribution-tjenesten, bruk denne kommandoen:


sudo docker run -d -p 5000:5000 --restart=always --name registry \
  -v /var/lib/registry:/var/lib/registry \
  registry:2

Oppsett av SSL/TLS

For å sikre kommunikasjonen mellom Docker-klienten og registeret, er det essensielt å konfigurere SSL/TLS.

1. Generere et SSL-sertifikat

Bruk denne kommandoen for å generere et selvsignert SSL-sertifikat:


sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/registry.key -out /etc/ssl/certs/registry.crt -days 365 -nodes

2. Konfigurere Docker Distribution

Rediger konfigurasjonsfilen for docker-distribution/etc/docker/registry/config.yml og legg til følgende innhold:


version: 0.12
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  tls:
    certificate: /etc/ssl/certs/registry.crt
    key: /etc/ssl/private/registry.key

3. Omstart av Distribution-tjenesten

For at de nye endringene skal tre i kraft, må vi starte Docker Distribution-tjenesten på nytt:


sudo systemctl restart registry

Konfigurere Docker-klienten

For å kunne kommunisere med det private registeret, må Docker-klienten konfigureres til å peke mot det.

1. Finne registernavnet

Finn ut navnet på registeret med denne kommandoen:


sudo docker inspect registry | grep Hostname

2. Legge til registeret i Docker-konfigurasjonen

Legg til registernavnet i Docker-konfigurasjonsfilen som ligger på ~/.docker/config.json. Hvis filen ikke finnes, kan du opprette den. Innholdet skal se omtrent slik ut:


{
  "registries": {
    "mitt-register": {
      "location": "https://mitt-register.eksempel.no:5000"
    }
  }
}

3. Logge inn på registeret

Logg deg inn på det private registeret med denne kommandoen:


sudo docker login mitt-register.eksempel.no

Testing av registeret

1. Lagre et bilde i registeret

Bygg et Docker-bilde og skyv det opp til det private registeret:


sudo docker build -t mitt-register.eksempel.no/mitt-bilde .
sudo docker push mitt-register.eksempel.no/mitt-bilde

2. Hente et bilde fra registeret

Test å hente bildet fra det private registeret:


sudo docker pull mitt-register.eksempel.no/mitt-bilde

Konklusjon

Du har nå lykkes med å sette opp et privat Docker-register på Ubuntu 22.04. Dette gir deg en trygg og sentralisert måte å lagre og håndtere dine Docker-bilder. Nå kan du enkelt distribuere og benytte bilder i hele din organisasjon.

Fordeler med et privat register inkluderer:

  • Kontroll: Du har full kontroll over dine bilder og hvem som har tilgang til dem.
  • Sikkerhet: Bildene dine lagres sikkert, og tilgangen er begrenset til autoriserte brukere.
  • Effektivitet: Et privat register reduserer behovet for å laste ned bilder fra eksterne kilder, noe som forbedrer bygge- og utrullingshastigheten.

Ofte stilte spørsmål

1. Hva er fordelene med å bruke Docker Distribution? Docker Distribution er en åpen kildekode Docker-registerløsning som er enkel å sette opp og bruke. Den fungerer som et grunnleggende register som kan utvides med forskjellige plugins.
2. Hvordan kan jeg lagre bilder i registeret mitt fra en ekstern server? Du kan bruke Docker-kommandoen docker save for å pakke et bilde til en TAR-fil, og deretter bruke docker load for å importere det inn i registeret.
3. Kan jeg bruke et domenenavn for registeret mitt? Ja, du kan benytte et domenenavn for ditt register ved å sette opp en DNS A-record som peker til serverens IP-adresse.
4. Hvordan kan jeg begrense tilgangen til registeret mitt? Du kan kontrollere tilgangen til registeret ved å konfigurere ACL-er på servernivå, eller benytte autentisering via LDAP eller OIDC.
5. Hva er forskjellen mellom et privat og et offentlig Docker-register? Et privat Docker-register er kun tilgjengelig for autoriserte brukere, mens et offentlig register er åpent for alle.
6. Kan jeg benytte mitt private register med andre Docker-verktøy? Ja, du kan bruke ditt private register med andre verktøy som Docker Compose og Kubernetes.
7. Hvordan kan jeg overvåke registeret? Du kan overvåke registeret via kommandoen docker stats eller integrere det med et monitoreringssystem som Prometheus.
8. Hvordan feilsøker jeg problemer med registeret? Du kan feilsøke ved å sjekke Docker-loggene eller bruke docker container ls for å se om registerets container kjører.
9. Er det mulig å ta sikkerhetskopi og gjenopprette registeret? Ja, du kan bruke docker save og docker load for å sikkerhetskopiere og gjenopprette registeret.
10. Er det beste praksis å bruke et privat Docker-register for alle prosjekter? Det kan være beste praksis å bruke privat register for prosjekter som inneholder sensitiv informasjon eller som krever streng tilgangskontroll. For mindre prosjekter, eller prosjekter hvor sikkerhet ikke er en prioritet, kan Docker Hub eller andre offentlige registre være tilstrekkelig.