Zum Hauptinhalt springen
Zurück zur Kategorie

Private Docker Registry einrichten: Image-Speicherung und -Verwaltung

Private Docker Registry einrichten, sichere Registry mit TLS, Authentifizierung, Image Push/Pull, Enterprise Registry mit Harbor und CI/CD-Integration.

Lesezeit: 14 dk Container & Orchestrierung
dockerregistryimageharborcontainerci/cdspeicherungprivate registry

Inhaltsverzeichnis

Private Docker Registry einrichten

Öffentliche Registries wie Docker Hub sind praktisch, aber das Hosten einer eigenen Registry für private Images bietet Vorteile in Sicherheit, Geschwindigkeit und Kosten. Dieser Leitfaden behandelt Optionen von der einfachen Docker Registry bis zum Enterprise Harbor.

Warum eine private Registry?

VorteilBeschreibung
SicherheitPrivate Images nicht öffentlich zugänglich
GeschwindigkeitSchnelles Pull/Push im lokalen Netzwerk
KostenKeine Docker Hub Rate Limits
KontrolleVollständige Image-Lifecycle-Kontrolle
ComplianceDatenlokalisierungsanforderungen

1. Einfache Docker Registry (registry:2)

Grundlegende Einrichtung

hljs bash
# Registry-Container starten
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  registry:2

# Registry-Betrieb überprüfen
curl http://localhost:5000/v2/
# Ausgabe: {}

Image Push und Pull

hljs bash
# Image taggen
docker tag myapp:latest localhost:5000/myapp:latest

# In Registry pushen
docker push localhost:5000/myapp:latest

# Aus Registry pullen
docker pull localhost:5000/myapp:latest

# Images in Registry auflisten
curl http://localhost:5000/v2/_catalog

2. Sichere Registry mit TLS

hljs bash
# Zertifikatsverzeichnis erstellen
mkdir -p /etc/docker/certs/registry

# Self-Signed-Zertifikat erstellen
openssl req -newkey rsa:4096 -nodes -sha256 \
  -keyout /etc/docker/certs/registry/domain.key \
  -x509 -days 365 \
  -out /etc/docker/certs/registry/domain.crt \
  -subj "/CN=registry.example.com" \
  -addext "subjectAltName=DNS:registry.example.com,IP:192.168.1.100"

# Zertifikat zu Dockers vertrauenswürdigen Zertifikaten hinzufügen
mkdir -p /etc/docker/certs.d/registry.example.com:5000
cp /etc/docker/certs/registry/domain.crt \
   /etc/docker/certs.d/registry.example.com:5000/ca.crt

systemctl restart docker

Registry mit TLS starten

hljs bash
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  -v /etc/docker/certs/registry:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

3. Registry mit Authentifizierung

hljs bash
# htpasswd-Datei erstellen
mkdir -p /etc/docker/registry/auth
docker run --rm \
  --entrypoint htpasswd \
  httpd:2 -Bbn admin StarkesPasswort123! > /etc/docker/registry/auth/htpasswd

# Registry mit Authentifizierung starten
docker run -d \
  --name registry \
  --restart always \
  -p 5000:5000 \
  -v registry-data:/var/lib/registry \
  -v /etc/docker/certs/registry:/certs \
  -v /etc/docker/registry/auth:/auth \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

# Anmelden
docker login registry.example.com:5000

4. Registry mit Docker Compose

hljs yaml
version: '3.8'

services:
  registry:
    image: registry:2
    restart: always
    ports:
      - "5000:5000"
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
    volumes:
      - registry-data:/var/lib/registry
      - ./certs:/certs:ro
      - ./auth:/auth:ro

  registry-ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - "8080:80"
    environment:
      - REGISTRY_TITLE=REXE Private Registry
      - REGISTRY_URL=https://registry.example.com:5000
      - SINGLE_REGISTRY=true

volumes:
  registry-data:

5. Harbor — Enterprise Registry

hljs bash
# Harbor-Installer herunterladen
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xzf harbor-online-installer-v2.9.0.tgz
cd harbor

cp harbor.yml.tmpl harbor.yml
nano harbor.yml
hljs yaml
# harbor.yml
hostname: registry.example.com

https:
  port: 443
  certificate: /etc/harbor/certs/domain.crt
  private_key: /etc/harbor/certs/domain.key

harbor_admin_password: StarkesPasswort123!
data_volume: /data/harbor
hljs bash
./install.sh
docker login registry.example.com

6. Registry-Bereinigung (Garbage Collection)

hljs bash
# Ungenutzte Schichten bereinigen
docker exec registry registry garbage-collect \
  /etc/docker/registry/config.yml

# Dry-Run
docker exec registry registry garbage-collect \
  --dry-run \
  /etc/docker/registry/config.yml

7. CI/CD-Integration

hljs yaml
# .github/workflows/build-push.yml
name: Build and Push

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Login to Private Registry
        uses: docker/login-action@v3
        with:
          registry: registry.example.com:5000
          username: ${{ secrets.REGISTRY_USER }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - name: Build and Push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: registry.example.com:5000/myapp:${{ github.sha }}

Fazit

Eine private Docker Registry ist für Image-Sicherheit und -Verwaltung in Unternehmensumgebungen unerlässlich. Wählen Sie registry:2 für einfache Anwendungsfälle, Harbor für Enterprise-Funktionen (RBAC, Sicherheits-Scanning, Replikation). Mit einer privaten Registry auf REXE-Servern können Sie Ihre Images sicher speichern und in CI/CD-Pipelines integrieren.