Mit Docker lassen sich Anwendungen in vielen Fällen bequem als Container bereitstellen. Ein großer Vorteil ist, dass Installationsarbeiten unnötig werden und sichergestellt ist, dass sich der Container in jeder Umgebung identisch verhält. Natürlich ist Docker keine Wunderwaffe, die alle Probleme, die eine Applikation oder eine Infrastruktur mit sich bringen erledigt. Hat man sich jedoch mit den Grundlagen vertraut gemacht, lassen sich einige Vorteile nutzen. Wichtige Werkzeuge für mich bei der Arbeit mit Containern ist eine Konsole und eine Versionsverwaltung wie GitHub. Hier checke ich alle meine Docker spezifischen Dateien ein, damit ich egal wo meine Container direkt einsetzen kann, ohne nochmal groß Arbeit investieren zu müssen. Betrieben werden die Container dann direkt über die Konsole. Das starten und stoppen der Container übernimmt systemd. Das ist jetzt nicht unbedingt eine Sache, die jeden Geschmack trifft. Viele wünschen sich für den Betrieb von Diensten eine grafische Oberfläche. Genau für diesen Zweck gibt es unter anderem Portainer. Die “Community Edition” ist Open Source und bringt bereits alles mit, was für den täglichen Betrieb erforderlich ist. Neben dem Zugriff über die Docker API lassen sich auch Kubernetes Umgebungen und Azure ACI direkt einbinden. Das schöne an Portainer ist, es lässt sich mit sehr minimalem Aufwand direkt als Docker Container betreiben. Es muss also nur eine kleine Docker Compose Datei angelegt werden, Container starten, Passwort vergeben, mit Docker API verbinden und schon kanns losgehen. Die Datei “docker-compose.yml” kann wie folgt aussehen, um direkt mit Portainer starten zu können.
version: "3.9" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always security_opt: - no-new-privileges:true ports: - 9000:9000 volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - portainer-data:/data volumes: portainer-data:
Gestartet wird der Container dann mit folgendem Befehl:
docker-compose up -d —build
Direkt danach kann man sich per Browser auf die Weboberfläche verbinden.
http://IP_DES_SERVERS:9000
Hierbei erfolgt die Kommunikation erstmal unverschlüsselt und direkt über den angegebenen Port. Alternativ lässt sich auch ein Reverse Proxy wie z.B. „Traefik“ vorschalten, um den Port nicht angegeben zu müssen und die Kommunikation zu verschlüsseln. In meinem Fall schaut meine Docker Compose Datei dann wie folgt aus. Wichtig ist zu Wissen, dass das nur eine Möglichkeit ist und abhängig von der eigenen Traefik Konfiguration etwas anders aussehen kann.
version: "3.9" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always security_opt: - no-new-privileges:true networks: - traefik_proxy volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - portainer-data:/data labels: - "traefik.enable=true" - "traefik.http.routers.portainer.rule=Host(`docker.servername`) && PathPrefix(`/portainer`)" - "traefik.http.routers.portainer.tls=true" - "traefik.http.routers.portainer.middlewares=addtrailingslash@file, portainer-stripprefix, default-headers@file" - "traefik.http.middlewares.portainer-stripprefix.stripprefix.prefixes=/portainer" - "traefik.http.services.portainer.loadbalancer.server.port=9000" volumes: portainer-data: networks: traefik_proxy: external: true
In diesem Fall lässt sich dann die Portainer Oberfläche über folgende URL aufrufen:
https://servername/portainer
Mit Portainer erhält man einen schönen Überblick über die eigenen Container. Es lassen sich auch direkt über die Oberfläche veraltete Images oder Volumen anzeigen, die dann direkt gelöscht werden können.

Die einzelnen Container lassen sich auch bei Bedarf direkt aus der Weboberfläche heraus neu starten.

Für den täglichen Betrieb bringt Portainer soweit alles mit, was erforderlich ist. Wenn es um die Überwachung der Container Infrastruktur geht, würde ich einen Schritt weitergehen. Ich selbst nutze hierfür eine Kombination aus “cAdvisor” “Prometheus” und “Grafana”. Die einzelnen Komponenten laufen wiederum als Docker Container und liefern mir eine schöne grafische Auswertung zu meinem eigenen Docker Server.

Das ist aber wie gesagt ein zusätzlicher Schritt, der jedoch meiner Meinung nach für einen ordentlichen Betrieb nicht fehlen sollte.