Container grafisch mit Portainer verwalten

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.

Portainer Volume Overview

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

Portainer Container Details

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.

Grafana Docker Monitoring Dashboard

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