In mijn bericht van vorige week over het installeren van Learning Locker op mijn Synology Diskstation, maakte ik al melding van het gebruik van Portainer. Dit in plaats van de in de Synology ingebouwde opties. Portainer draait zelf op Docker, dus je hebt geen Synology Diskstation nodig om het te gebruiken.
Daarnaast kun je Portainer niet alleen gebruiken voor het beheren van Docker op de machine waar Portainer op draait, maar ook op andere systemen, zoals een Raspberry Pi.
De Pi Zero waar SBFSpot op draaide was gecrasht en ik wilde dit moment van opnieuw opbouwen van het apparaat (nee, natuurlijk had ik niet gewoon even een backup-kopie van de image opgeslagen, dat zou veel te logisch en handig zijn geweest) gebruiken om er Docker op te installeren.
Docker op een Raspberry Pi installeren is niet heel ingewikkeld. Ik volgde deze stappen:
- Downloaden van de meest recente image van Raspbian (lite) en op het micro-SD kaartje zetten
- ssh en wpa_supplicant.conf toevoegen
- Opstarten en via ssh verbinding maken
Daarna de stappen zoals hier genoemd:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi
Reboot en test:
docker run hello-world
Installatie van de verschillende afhankelijkheden:
sudo apt-get install libffi-dev libssl-dev
sudo apt-get install -y python python-pip
sudo apt-get remove python-configparser
Installatie van Docker Compose (duurt een tijd!)
sudo pip install docker-compose
Het maken van de verbinding zodat Portainer contact kon maken was op zich ook niet heel veel werk, alleen veel stappen (ik volgde deze handleiding waarbij ik ga voor 10 jaar houdbaarheid van de certificaten, voor een interne Rpi maakt me dat niet uit!):
export HOST=<your-domain-name>
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
mkdir ~/.certs
cp *.pem ~/.certs
mkdir -p /etc/systemd/system/docker.service.d/
sudo nano /etc/systemd/system/docker.service.d/startup_options.conf
Inhoud van dat bestand:
# /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/home/pi/.certs/ca.pem --tlscert=/home/pi/.certs/cert.pem --tlskey=/home/pi/.certs/key.pem -H fd:// -H tcp://0.0.0.0:2376
Daarna nog:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
Daarna moest ik cert.pem en key.pem van de Raspberry Pi downloaden naar mijn laptop, zodat ik in Portainer ze kon uploaden voor het tot stand brengen van de verbinding.
Conclusie
Het werkt En het werkte meteen. Dat is positief gezien het enorme aantal opdrachten dat ik moet uitvoeren. Dat is nou precies wat ik met Docker wil voorkomen. Dus het is toch wel handig om een backup-kopie te maken van de image die ik nu gemaakt heb. Want dan hoef ik die later alleen maar terug naar een (nieuwe) micro-SD kaart te zetten in plaats van al deze handelingen Maar het beheren op afstand is natuurlijk wel mooi.
Oh, voor het daadwerkelijke gebruik van de RpI, ben ik daarna verder gegaan met deze Docker image. Maar uiteindelijk vond ik daar 3 docker containers voor zo’n simpele taak niet logisch en ben verder gegaan met een nieuwe lege image zónder Docker.