In diesem Artikel zeigen wir die wichtigsten Befehle, wenn man mit Docker Images in seiner eigenen Docker Registry arbeiten möchte. Wir nutzen hierfür Harbor.


Inhaltsverzeichnis

  1. Docker Registry Login
  2. Webanwendung anpassen
  3. Docker Image bauen
  4. Docker Image pushen
  5. Docker Compose anlegen und starten

In diesem Beispiel läuft die Registry auf folgender URL: registry.cyberinnovations.de

1. Docker Registry Login

Wenn die Registry das erste Mal genutzt wird, muss man sich im Terminal zunächst mit der privaten Docker Registry verbinden, da sonst standardmäßig mit Docker Hub kommuniziert wird.

docker login registry.cyberinnovations.de

2. Webanwendung konfigurieren

Nun müssen wir die statische Webanwendung so anpassen, das wir ein Docker Image bauen können und dieses dann zur Registry gepusht werden kann.

Im ersten Schritt erstellen wir einen Ordner für die statische Webanwendung und navigieren in diesen Ordner:

mkdir webanwendung
cd webanwendung

Nun legen wir einen Ordner namens code an:

mkdir code

In diesem Ordner befindet sich im Hauptverzeichnis unsere index.html und alles weitere, was für die Webanwendung benötigt wird (css, js, img, etc.)

Anschließend erstellen wir ein Dockerfile und nutzen hierfür nginx alpine, da dieses Image besonders leightweight ist und unsere Ressourcen spart.

In dem Dockerfile mounten wir den lokalen Ordner "code" im Docker Container in den Nginx Webserver.

Das Dockerfile sieht wie folgt aus:

FROM nginx:1.15.8-alpine
copy nginx.conf /etc/nginx/nginx.conf
copy ./code/* /usr/share/nginx/html/

In der zweiten Zeile definieren wir, dass unsere lokale Nginx Config im Container von Nginx genutzt werden soll. Daher müssen wir lokal eine nginx.conf anlegen:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server {
listen 80;
location = /status {
access_log off;
default_type text/plain;
add_header Content-Type text/plain;
return 200 "alive";
}
location / {
gzip off;
root /usr/share/nginx/html/;
index index.html;
}
location ~* \.(js|jpg|png|css)$ {
root /usr/share/nginx/html/;
}
}
sendfile on;
keepalive_timeout 65;
}

Durch das einbinden der lokalen Nginx config können wir z.B. das Logging flexibel anpassen oder andere individuelle Nginx Konfigurationen vornehmen.

Im Hauptverzeichnis (webanwendung) sollte nun folgende Struktur zu finden sein:

  • code (Ordner mit index.html der Webanwendung und allen weiteren Abhängigkeiten der Webanwendung)
  • nginx.conf (Konfiguration des Webservers der Anwendung)
  • Dockerfile (Anweisungen für das Bauen des Docker Images)

3. Docker Image bauen

Da nun die Grundstruktur fertig ist, können wir mittels docker nun das Docker Image bauen. In unserem Beispiel nennen wir die Anwendung webanwendung.cyberinnovations.de. Im Ordner deiner Webanwendung musst du folgenden Befehl ausführen:

docker build -t webanwendung.cyberinnovations.de .

Wenn du nun folgenden Befehl eingibst, solltest du das Docker Image webanwendung.cyberinnovations.de sehen können:

docker images

In unserer Docker Registry haben wir ein Projekt "Webhosting" angelegt und wollen, dass das Image in diesem Projekt zu finden ist. Unsere gewünschte URL ist daher: registry.cyberinnovations.de/webhosting/webanwendung.cyberinnovations.de

Diese URL müssen wir dem Image nun als Tag zuweisen, um es pushen zu können:

docker tag webanwendung.cyberinnovations.de registry.cyberinnovations.de/webhosting/webanwendung.cyberinnovations.de

4. Docker Image pushen

Mittels docker push kann man das Image nun in die eigene Registry pushen. Um sicherzustellen, dass das Docker image richtig konfiguriert wurde, kann man nun überprüfen, ob die defininerte URL im docker image auftaucht:

docker images

Wenn das der Fall ist, kann mit folgendem Befehl das Docker Image in die private Registry gepusht werden:

docker push registry.cyberinnovations.de/webhosting/webanwendung.cyberinnovations.de

5. Docker Compose anlegen und starten

Im letzten Schritt wollen wir nun eine Docker Compose Datei anlegen, um die Anwendung auf einem Server oder lokal aufsetzen zu können.

In der Docker Compose muss daher die URL des Docker Images hinterlegt werden und sieht bei dieser Anwendung wie folgt aus:

version: "3"
services:
client:
container_name: webanwendung.cyberinnovations.de
image: registry.cyberinnovations.de/webhosting
/webanwendung.cyberinnovations.de:latest
ports:
- 1337:80
restart: always

In der Docker Compose haben wir 1337 als öffentlichen Port definiert. Nun sollte die Compose ohne Probleme gestartet werden können:

docker-compose up -d

Wenn du die Compose auf deinem Lokalen Rechner gestartet hast, solltest du in deinem Browser über folgende URL auf deine Anwendung zugreifen können: http://localhost:1337