Nachdem im vorigen Artikel Nexus für Maven eingerichtet wurde zeige ich nun, wie Nexus als Docker-Registry benutzt werden kann.
Einrichten der Repositories
Docker unterstützt für Images kein Snapshot-Konzept. Folglich sind drei Repositories notwendig:
- DockerProxy als Proxy für Dockerhub
- DockerHost für die eigenen Images
- DockerGroup als Gruppe für Hosted und Proxy
Zugriff über http
Docker verlangt im Standard eine gesicherte Kommunikation über https. Um unsichere Verbindungen zu erlauben muss die Docker-Engine in /etc/docker/daemon.json
für “unsichere” Registries konfiguriert werden:
{ "insecure-registries": [ "10.72.2.55:8082", "10.72.2.55:8083", "10.72.2.55:8084"], "disable-legacy-registry": true }
Nach Neustart der Docker-Engine ist damit ein Zugriff über http erlaubt:
service docker restart
Vorsicht: Alle laufenden Container sind nach dem Neustart gestoppt!
Authentifizierung und Pull
Die Authentifizierung gegen das Repository erfolgt durch
docker login -u admin -p admin123 10.72.2.55:8084
Hierbei wird im User-Home eine Datei mit den angegebenen Credentials angelegt und für jegliche Kommunikation mit dieser Registry benutzt.
Nun können Images vom Nexus geladen werden, der selbst wiederum die Daten von Dockerhub lädt und chached.
docker pull 10.72.2.55:8084/nginx
Push eines eigenen Images
Der Push erfolgt auf das Hosted Repository. Dazu ist ein weiterer Login notwendig:
docker login -u admin -p admin123 10.72.2.55:8083
Nun muss das vorhandene Image neu getagged werden, und zwar mit den Repository-Informationen:
docker tag javacream/javabase:1.0 10.72.2.55:8083/javacream/javabase:1.0
dann kann letztendlich gepushed werden:
docker push 10.72.2.55:8083/javacream/javabase:1.0
Push über Maven
In einem Maven-basierten Build-Prozess, der in diesem Artikel vorgestellt wurde, wird das Bauen der Docker-Images in einem Parent-POM definiert. Soll noch gepushed werden wird einfach der Name des Repositories mit konfiguriert:
<properties>
<repository_base_url>http://10.72.2.55:8081</repository_base_url>
<docker.namespace.prefix>10.72.2.55:8083/javacream</docker.namespace.prefix>
</properties>
Dann erfolgt das Push einfach über docker:push
. Die Anmeldeinformationen erfolgen über die durch den docker login
gespeicherten Informationen.
Benutzung von Nexus in Docker-Seminaren
Mit den oben genannten Konfigurationen kann in der Umgebung der Integrata ein fertig eingerichteter Nexus-Server benutzt werden. Dieser ist gemäß der obigen Ausführungen konfiguriert. Allerdings darf nur der Referenten Images pushen und somit den Teilnehmern zur Verfügung stellen.