Skip to content

Sonatype Nexus als Docker Registry

Sonatype Nexus installieren und einrichten

Wir erstellen uns erst ein Verzeichnis für die Nexus Konfiguration und setzen die Berechtigungen auf die UID/GID 200.

root:~# mkdir -p /opt/sonatype/nexus/nexus-data && sudo chown -R 200:200 /opt/sonatype/nexus/nexus-data

Nun starten wir Sonatype Nexus als Docker. Dabei geben wir den Port 8081 als Nexus Port und 5000 als Port für die Docker Registrie, die wir später konfigurieren. Als Volume verwenden wir das soeben erstellte Verzeichnis.

root:~# docker run -d -p 8081:8081 -p 5000:5000 --name nexus -e NEXUS_CONTEXT='' -v /etc/localtime:/etc/localtime:ro -v /opt/sonatype/nexus/nexus-data:/nexus-data sonatype/nexus3

Nun erstellen wir uns noch eine Apache Konfiguration, der als Proxy für unser Nexus Repository eingerichtet ist. Dazu erstellen wir die Datei /etc/apache2/conf-available/nexus.conf mit foldendem Inhalt. Der Hostname nexus.example.com muss natürlich mit dem jeweiligen Hostnamen ersetzt werden.

# Proxy settings for nexus
#
<IfModule mod_proxy.c>

    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Require all granted
    </Proxy>

    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
    ProxyPassReverseCookieDomain 127.0.0.1 "nexus.example.com"

</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

In der Vhost Datei für nexus.example.com, fügen wir die Nexus Konfiguration mit Include ein.

<VirtualHost *:443>

    ServerName   nexus.example.com
    DocumentRoot /var/www/html

    # Nexus Konfiguration
    Include conf-available/nexus.conf

    ....

</VirtualHost>

Nun gehen wir auf https://nexus.example.com/ und vervollständigen das Setup. Dazu melden wir uns als der Benutzer admin an. Das Passwort ist unter /opt/sonatype/nexus/nexus-data/admin.password zu finden.

nexus-signin.png

Nun setzen wir für den Benutzer admin ein neues Passwort.

nexus-setup2.png

Nun konfigurieren wir noch den Zugriff, ob wir Anonymous zulassen oder nicht.

nexus-setup3.png

Nachdem wir uns als Benutzer admin angemeldet haben, gehen wir auf Settings / Repositories und erstellen ein neues Repository vom Typ docker (hosted).

nexus-repository1.pngnexus-repository2.png

Dort tragen wir unter HTTP Port, den Port 5000 ein, den wir beim erstellen des Docker Image gewählt haben. Außerdem aktivieren wir noch die Docker V1 API.

nexus-repository3.png

Nachdem wir das neue Docker Repository erstellt haben, gehen wir auf Security / Realm und fügen die Authentifizierung Docker Bearer Token Realm hinzu.

nexus-realm.png

Unsere Dockerumgebung einrichten

Damit wir die Neue Docker Regestry von Sonatype Nexus nutzen können, müssen wir diese Registriy als Insecure Registries einstellen, da wir eine HTTP Verbindung nutzen.

Notiz

Wie man eine HTTPS Verbindung zur Nexus Docker Registry einrichtet, habe ich leider noch nicht gelesen.

Wir tragen die neue Docker Regestry als Insecure Registries in der Docker Konfiguration wie folgt ein.

root:~# vi /etc/docker/daemon.json
{
  "insecure-registries" : ["nexus.example.com:5000"]
}

Im Anschluß daran starten wir den Docker Daemon neu.

root:~# systemctl restart docker

Wenn wir uns die Docker Konfiguration ansehen, sollte die neue Docker Registry auftauchen.

root:~# docker info

Neue Docker Registry verwenden

Zuerst erstellen wir uns eine Datei mit dem Anmelde Passwort für unsere Docker Registry.

root:~# vi ~/login.txt

Dann melden wir uns mit docker login an die neue Docker Registry an.

root:~# cat ~/login.txt | docker login -u admin --password-stdin nexus.example.com:5000

Der erste Schritt zur Verwendung des selbst gehosteten Registrierung besteht darin, ein Docker-Image für diese Registrierung mit dem Befehl docker tag zu markieren.

root:~# docker tag debian nexus.example.com:5000/debian

Um das im obigen Beispiel erstellte Image zu übertragen, nutzen wir den Befehl docker push.

root:~# docker push nexus.example.com:5000/debian

Um das im obigen Beispiel erstellte Image abzurufen, nutzen wir den Befehl docker pull.

root:~# docker pull nexus.example.com:5000/debian:latest

Dokumentation