Mit dem Wechsel auf openHAB 4.x , habe ich meine Installation auf Docker umgestellt. Die Herausforderung war nicht nur openHAB auf Docker zu bringen, sondern auch alle anderen Komponenten die ich mittlerweile benutze. Bei der Hardware bin ich dann auch von einer Raspberry PI 4 (4GB RAM/500 GB SSD) auf einen MacMini 2012 (16GB RAM/500 GB SSD) gewechselt. Mittlerweile (seit Nov 2024) nutze ich eine Synology NAS DS923 mit 20GB RAM und 4x3 TB HDD.
Der Stromverbrauch dieses NAS liegt bei ca. 48W. Um das zu Messen, habe ich ein Shelly Plug S genutzt.
Natürlich stellt sich die Frage: "Ist eine Umstellung auf Docker nötig?". 
Über die Jahre die ich openHAB nutze, bin ich von V1.8.x, 2.4.x, 3.x, 4.0.x und 4.3 gewechselt. Das war immer mit Testen und "Herausforderungen" verbunden. Man möchte ja nach einem Upgrade weiterhin die gleichen Funktionen haben. Dazu muss man testen. Ich habe mir immer wieder auf Raspberry PI`s oder unter MAC Fusion Installationen zum testen erstellt. Mit Docker ist der Aufwand diese Umgebung mal eben bereit zu stellen um ein vielfaches geringer. Die vollständige Installation / Konfiguration incl. restore im Betriebssystem dauerte gefühlt einen Tag (8-10h). Mit Docker ist dies mit weit weniger als 1h nötig. Dabei nutze ich schon immer ausschließlich Textdateien zur Konfiguration der openHAB Umgebung.
In der Synology Administrations-Oberfläche dem "Container Manager" sieht d as dann wie folgt aus. Für die Verwaltung der Container selbst nutze ich Portainer. Damit hatte ich schon vor dem "Umzug" meiner openHAB Umgebung Erfahrungen gesammelt. Viel kann man auch über die UNIX shell ebene machen, die man auch per ssh auf dem Synology NAS erreichen kann.
as dann wie folgt aus. Für die Verwaltung der Container selbst nutze ich Portainer. Damit hatte ich schon vor dem "Umzug" meiner openHAB Umgebung Erfahrungen gesammelt. Viel kann man auch über die UNIX shell ebene machen, die man auch per ssh auf dem Synology NAS erreichen kann. 
Vor Docker hatte ich einmal Abhängigkeiten von Bibliotheken im Linux Betriebssystem, die ich kurzfristig nicht lösen konnte. Auch ein Vorteil von Docker. Ich hoffe Ihr bekommt mit den unten aufgeführten Dateien eine gute Vorlage für die eigene Installation ;-) Mit dem folgenden Befehl sollte dann ein solcher Docker Container gestartet werden.
docker-compose -f docker-compose.yml up -d
Hier nun die verschiedenen "docker-compose.yaml" Dateien (Stand Dez 2023).
grafana
Hier der vollständige Pfad /docker/grafana/docker-compose.yaml
version: "3.3"
networks:
  default:
    driver: bridge
services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped
    networks:
      - default
    ports:
      - "3000:3000"
    user: $PUID
    volumes:
      - $DOCKERDIR/appdata:/var/lib/grafana
      - $DOCKERDIR/appetc:/etc/grafana
      - $DOCKERDIR/applog:/var/log/grafana
#    environment:
#      GF_INSTALL_PLUGINS: "grafana-clock-panel,grafana-simple-json-datasource,grafana-worldmap-panel,grafana-piechart-panel"
mosquitto
Hier der vollständige Pfad /docker/mosquitto/docker-compose.yaml
version: '3.8'
services:
    mosquitto:
        image: eclipse-mosquitto:2
        ports:
            - 1883:1883
            - 8883:8883
#            - 9001:9001
        volumes:
            - /docker/mosquitto/config:/mosquitto/config
            - /docker/mosquitto/data:/mosquitto/data
        networks:
            - mosquitto
networks:
    mosquitto:
        name: mosquitto
        driver: bridge
openhab4
Hier der vollständige Pfad /docker/openhab4/docker-compose.yaml
services:
  openhab-mariadb:
    image: mariadb
    container_name: openhab-mariadb
    command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
    healthcheck: 
      disable: true 
    ports:
      - 3306:3306
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./data_mariadb:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=openhab # Datenbank Passwort wählen
      - MYSQL_DATABASE=openhab4
      - MYSQL_USER=openhab
      - MYSQL_INITDB_SKIP_TZINFO=1 # Behebt die bekannten Startprobleme der Datenbank
    networks:
      app-nw:
      backend-nw:
        aliases:
          - db 
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: openhab-phpmyadmin
    restart: always
    links:
      - openhab-mariadb
    ports:
      - 8081:80
    environment:
      - PMA_PORT=3306
      - PMA_HOST=openhab-mariadb
#      - PMA_ARBITRARY=1
#      - PMA_USER=openhab
#      - PMA_PASSWORD=openhab
    networks:
      app-nw:
      backend-nw:
        aliases:
          - db
  openhab-frontail:
    image: welteki/frontail-openhab:latest
    container_name: openhab-frontail
    restart: always
    ports:
      - "9001:9001"
    volumes:
      - /docker/openhab4/data/userdata:/openhab/userdata:ro
  openhab-mosquitto:
    container_name: openhab-mqtt
    restart: always
    image: eclipse-mosquitto
    environment:
      TZ: ${TZ}
      USER_ID: 9001
      GROUP_ID: 9001
    ports:
      - "1883:1883"
      - "9002:9002"
    volumes: 
      - /docker/openhab4/data_mqtt/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
      - /docker/openhab4/data_mqtt/data:/mosquitto/data
      - /docker/openhab4/data_mqtt/log:/mosquitto/log
    networks:
      - default 
  openhab-openhab:
    image: "openhab/openhab:4.0.3"
    container_name: openhab-openhab
    restart: always
    privileged: true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./data/conf/:/openhab/conf
      - ./data/addons:/openhab/addons
      - ./data/userdata:/openhab/userdata
    environment:
      TZ: ${TZ}
      OPENHAB_HTTP_PORT: ${OPENHAB_HTTP_PORT}
      OPENHAB_HTTPS_PORT: ${OPENHAB_HTTPS_PORT}
      CRYPTO_POLICY: "unlimited"
      EXTRA_JAVA_OPTS: "-Duser.timezone=${TZ}"
      USER_ID: 9001
      GROUP_ID: 9001
      # Test to run openHAB with German number format
      # Can be tested by entering "locale" after "docker exec -t -i openhab /bin/bash"
      LANG: de_DE.UTF-8
      LANGUAGE: de_DE.UTF-8
      LC_ALL: de_DE.UTF-8
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
      - /dev/ttyUSB1:/dev/ttyUSB1
      - /dev/comfoair:/dev/comfoair
    network_mode: host
volumes:
  data_openhab_conf:
  data_openhab_addons:
  data_openhab_userdata:
  data_mariadb:
  data_mqtt:
networks:
  app-nw:
    internal: false
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: app-${PROJECT_NAME}
  backend-nw:
    internal: true
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: be-${PROJECT_NAME}
Für das Starten des openHAB container müssen noch einige Umgebungvariablen gesetzt werden. Diese habe ich im OS vorher gesetzt. Man kann das über die Datei stack.env machen und beim initialen Starten mit angeben, das hatte ich aber anders gelöst.
PROJECT_NAME=openhab3
OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443
INFLUXDB_DB_PORT=8086
GRAFANA_HTTP_PORT=3000
CHRONOGRAF_HTTP_PORT=8888
MOSQUITTO_MQTT_PORT=1883
MOSQUITTO_MQTTS_PORT=8883
TZ=Europe/Berlin
rctmon
Hier der vollständige Pfad /docker/rctmon/docker-compose.yaml
version: '2.2'
services:
  rctmon:
    container_name: rctmon
    restart: always
    image: sfudeus/rctmon:preview-preview
    ports:
      - "9831:9831"
    volumes: 
      - /docker/rctmon/config.yaml:/config.yaml
      - /docker/rctmon/logconfig.log:/logconfig.log
    networks:
      - default
volumes:
  data_rctmon:
vzlogger
Hier der vollständige Pfad /docker/vzlogger/docker-compose.yaml
version: '3.2'
services:
  vzlogger:
    image: torstend/vzlogger:latest
    container_name: vzlogger
    read_only: true
    command: [ "--httpd", "--httpd-port", "8081" ]
    tty: true
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    volumes:
      - /docker/vzlogger/config/vzlogger.conf:/etc/vzlogger.conf:ro
      - /docker/vzlogger/logs/vzlogger.log:/var/log/vzlogger.log
    healthcheck:
      interval: 10s
      timeout: 10s
      retries: 2

