Werde Teil unseres Teams und sorge für mehr Digitale Souveränität!
- Teamleiter IT – Kundenprojekte (m/w/d)
- IT Consultant (m/w/d)
- Senior Backend / Software Developer Python (m/w/d)
- u.v.m.

Seit der Veröffentlichung von UCS 4.1 im November 2015 unterstützt das App Center Docker Apps. Das sind Anwendungen, die in Form von Docker Images vorliegen und durch das App Center in einem Docker Container in Betrieb genommen werden. Dazu lädt das App Center das Docker Image einer App herunter und startet den Docker Container. Wir nennen diese Apps „Single Container Apps“, weil das App Center pro App nur einen Container unterstützt. Dieser Funktionsumfang ist für viele Apps ausreichend. Bis jetzt!
Die App Landschaft unterliegt einem stetigen Wandel und neue App Kandidaten wie Rocket.Chat, Metasfresh und Zammad bestehen nicht mehr nur aus einem Container. Diese Apps werden „Multi Container Anwendungen“ genannt. Um dem Wunsch vieler unserer Nutzer nachzukommen, auch solche Apps im Univention App Center zu finden und auf UCS zu betreiben, unterstützt das App Center nun mit dem UCS 4.3 Errata Update 345 Multi Container Apps und schafft damit die nötigen Voraussetzungen.
Eine verbreitete Herangehensweise bei der Containervirtualisierung, wie sie durch Docker umgesetzt wird, ist die Bereitstellung einzelner Services in einzelnen Containern. Der wohl häufigste Anwendungsfall ist die Trennung von Applikation und Datenbank wie zum Beispiel bei Rocket.Chat. Die Zahl der Container ist hierbei nicht auf zwei beschränkt, wie Metasfresh zeigt.
Wenn Sie mehr über die Docker Technologie an sich erfahren möchten, empfehlen wir Ihnen diese kurze Einführung:
Für Multi Container Anwendungen im Docker-Umfeld kommt Docker Compose zum Einsatz, das auch im App Center verwendet wird. Zentrales Element ist die docker-compose.yml Datei. Im Folgenden sehen Sie ein Beispiel für die App Rocket.Chat:
version: '2' services: rocketchat: image: rocketchat/rocket.chat:latest restart: unless-stopped volumes: - ./uploads:/app/uploads environment: - PORT=3000 - ROOT_URL=http://localhost:3000 - MONGO_URL=mongodb://mongo:27017/rocketchat - MONGO_OPLOG_URL=mongodb://mongo:27017/local - MAIL_URL=smtp://smtp.email depends_on: - mongo ports: - 3000:3000 mongo: image: mongo:3.2 restart: unless-stopped volumes: - ./data/db:/data/db command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1 # this container's job is just run the command to initialize the replica set. # it will run the command and remove himself (it will not stay running) mongo-init-replica: image: mongo:3.2 command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"' depends_on: - mongo hubot: image: rocketchat/hubot-rocketchat:latest restart: unless-stopped environment: - ROCKETCHAT_URL=rocketchat:3000 - ROCKETCHAT_ROOM=GENERAL - ROCKETCHAT_USER=bot - ROCKETCHAT_PASSWORD=botpassword - BOT_NAME=bot - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics depends_on: - rocketchat volumes: - ./scripts:/home/hubot/scripts ports: - 3001:8080
Diese Dateien im YAML Format definieren verschiedene Services. Diese Services geben an, welches Docker Image genutzt werden soll und welche Umgebungsvariablen, Volumes, Ports und Abhängigkeiten zu anderen Containern benötigt werden. In ihrer Gesamtheit wird so eine Applikation mit all ihren Teilen beschrieben, die mittels Docker Compose gestartet werden.
App Anbieter können ihre Docker Compose Konfiguration im App Provider Portal hinterlegen, wie der Screenshot am Beispiel von Zammad zeigt.
App Anbieter können eine ganze Reihe von Konfigurationseinstellungen für die App im Provider Portal hinterlegen. Dazu gehören auch Skripte, die zu unterschiedlichen Phasen während des App Lifecycles im Container und auf dem Host ausgeführt werden.
Bei Multi Container Apps muss für das App Center festgelegt werden, welches der definierten Services bzw. welcher Container der Hauptservice ist, auf den diese Skripte und auch manche Konfigurationen angewendet werden sollen. In der Regel ist der Hauptservice der Container, der die Applikation beinhaltet.
Bevor eine Multi Container App auf dem Zielsystem des Nutzers via Docker Compose in Betrieb genommen werden kann, wird die docker-compose.yml durch das App Center auf dem UCS-System direkt verarbeitet und um einige Punkte verändert bzw. ergänzt.
/var/lib/univention-appcenter/apps/<appid>/data
und /var/lib/univention-appcenter/apps/<appid>/conf
auf dem UCS-Host. Wenn im App Provider Portal in der App Konfiguration ebenfalls Volumes definiert sind, werden diese ebenfalls in der Docker Compose Datei durch das App Center für den Hauptservice ergänzt./etc/univention/base.conf
zur Verfügung sowie auch das Passwort für das sogenannte Maschinenkonto unter /etc/machine.secret
, über das der Hauptservice einen authentifizierten, lesenden Zugang auf das LDAP-Verzeichnis hat.Im Ergebnis startet Docker Compose auf dem Zielsystem eine Docker Compose Konfiguration, die nicht mehr 100% der Eingabe des App Anbieters entspricht. Das ist nötig, weil bereits beim Start einer App zahlreiche Informationen für eine optimale Integration vorhanden sein müssen. So können die Apps sich bestens auf die lokale Umgebung einstellen und sich entsprechend vorkonfigurieren, sodass Nutzer direkt loslegen können. Die veränderte Docker Compose Datei findet sich auf dem UCS Zielsystem unter
/var/lib/univention-appcenter/apps/$app/compose/docker-compose.yml
.
App Anbieter können nun direkt damit loslegen, im App Provider Portal ihre Docker Apps zu erstellen und die Docker Compose Konfiguration zu hinterlegen. Die Dokumentation hierzu erscheint in den nächsten Tagen. Die ersten Multi Container Apps sind bereits auf dem Weg und sollten in den nächsten Wochen im App Center veröffentlicht werden.
Nico Gulden studierte angewandte Informatik und arbeitet seit 2010 bei Univention. Als Technical Editor ist er verantwortlich für Ausbau und Pflege der Produktdokumentation. In seiner Freizeit widmet er sich seiner Familie, dem Lesen, der Bewegung an der frischen Luft zum Radfahren, Fotografieren, Geocaching und der Kinder- und Jugendarbeit.
Die Dokumentation wurde aktualisiert. Der Teil zu Multi Container Support ist hier beschrieben: https://docs.software-univention.de/app-provider.html#create-app-with-docker:compose
AntwortenWas ist mit Zammad und Kolab geschehen.
Beide nicht mehr unter Apps zu finden in der aktuellen 4.4
Zammad gab es bisher noch nicht im App Center, wir hatten hier den Bedarf über unsere „Vote for App“ Umfragen ermittelt – es befindet sich aber in der Umsetzung und wird hoffentlich in Kürze freigeschaltet (im Test-App-Center gibt es bereits eine Vorab-Version: http://docs.software-univention.de/app-provider-4.4.html#testing:test-app-center).
Kolab gibt es leider seit ca. 2 Jahren nicht mehr für UCS. Da die Integrationen immer von den Projekten oder Organisationen hinter der Software bereit gestellt werden, fragen Sie zum Status gerne direkt beim Kolab Projekt nach: https://www.kolab.org/
Antworten