Docker-Compose is te gebruiken om meerdere containers op te starten en met elkaar te laten communiceren. Er wordt een docker-compose bestand gemaakt met daarin de benodigde componenten zoals image, netwerk, volumes, privileges en de onderlinge afhankelijkheden kunnen ook ingesteld worden. Een docker-compose bestand wordt gebruikt om containers te starten die bij elkaar horen, bijvoorbeeld homeassistant, mosquitto en node-red.
Als basis voor docker-compose hebben we allereerst een host nodig. Hiervoor kan o.a. een Raspberry Pi 4 (PRi) gebruikt worden en als Operating Systeem bijvoorbeeld Ubuntu Jammy (22.04.3 LTS) server versie.
Vervolgens is het nodig om docker te installeren op deze RPi waarmee de containers gestart kunnen worden.
Voor de RPi wordt het programma ‘Raspberry Pi Imager‘ gebruikt en hiermee wordt het type RPi, het OS en de storage ingesteld en vervolgens geschreven op een SD-Card, USB-stick of een SSD schijf.
Voordat het OS op de SD-card wordt geschreven kun je nog extra instellingen aanpassen, bijvoorbeeld een hostname, username/password, wifi, en een SSH key via services.
Eenmaal alles naar wens ingesteld en ge-saved, kan het geschreven worden. Zodra de SD-Card gereed is, wordt deze uit de laptop gehaald en in de RPi geplaatst. De RPi kan dan opgestart worden met Ubuntu als OS.
Op de RPi kan ingelogd worden door er een toetsenbord en monitor op aan te sluiten en in te loggen met de ingestelde gebruikersnaam, of gebruik vanaf een andere computer het ‘ssh‘-commando gevolgd door gebruikersnaam@hostname.local zoals is ingesteld:
ssh nico@reaspberrypi.local
Installeren Docker
Om Docker te installeren dienen een aantal commando’s ingegeven te worden, als eerste zorgen dat we up-to-date zijn:
sudo apt update && sudo apt upgrade -y
Indien er vragen komen over een reboot of packages die hertsart worden, bevestig de voorgestelde defaults met OK. Nadat de upgrade gereed is dient de RPi herstart te worden:
sudo reboot
Sommige reeds geïnstalleerde packages vormen een conflict met docker dus die worden nu eerst verwijderd. Log weer in op de RPi en geef het volgende commando:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Om docker te kunnen installeren dient er een verwijzing te zijn naar de bronbestanden van docker en dat wordt gedaan door deze verwijzing toe te voegen aan de apt-repository:
sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Hierna kan docker geïnstalleerd worden met:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Om nu niet telkens als sudo’er de docker commando te moeten ingeven, maken we de huidige gebruiker lid van de docker goep:
sudo usermod -aG docker $USER
Hierna opnieuw inloggen op de RPi om de instellingen te gebruiken.
Docker kan getest worden door een container te runnen:
docker run hello-world
en daarmee is de installatie van docker gereed.
Home Assistant docker-compose script
Het volgende script is bedoeld om met behulp van ‘docker compose’ Home Assistant te installeren als een container. Hierdoor wordt dus de core-versie van HA geïnstalleerd. De naam van dit script moet zijn: docker-compose.yaml
version: "3.7" services: ################## # Home Assistant # ################## homeassistant: image: ghcr.io/home-assistant/home-assistant:stable container_name: homeassistant volumes: - haconfig:/config:rw - /etc/localtime:/etc/localtime:ro network_mode: host environment: - TZ=Europe/Amsterdam privileged: true restart: unless-stopped volumes: haconfig: name: homeassistant
Het script bestaat uit een ‘service:‘ met de naam ‘homeassistant‘ die een image ophaalt uit github container registry, een volume aanmaakt voor de configuratie van HA, als network-type ‘host‘ gebruikt en een timezone insteld via een variable. Het volume dat gebruikt wordt in de homeassistant-service dient apart gedefinieerd te worden via ‘volumes:‘
Let goed op dat de homeassistant-service ingesprongen is onder services: en de instellingen onder homeassistant: ook weer zijn ingesprongen, dit is typisch yaml-formaat.
Netwerk-type ‘host’ zorgt ervoor dat het IP-adres van de RPi gebruikt gaat worden voor Home-Assistant. Indien gewenst kan ook een eigen IP adres aan Home Assistant toegekend worden door gebruik te maken van je DHCP server. Wijzig dan het netwerk-type naar ‘bridge’.
Om Home Assistant te installeren met docker compose, geef het volgende commando:
docker compose up -d
Het kan even duren voordat Home Assistant start, de image moet eerst gedownload worden. Eenmaal gestart kan HA bekeken worden via een browser op je laptop/computer naar http://raspberrypi.local:8123 (of welke naam je dan ook aan de RPi hebt gegeven)
Kijk hier om additionele applicaties toe te voegen met docker-compose.