Docker is een systeem om diverse services op één systeem (het host systeem) aan te bieden zonder dat de configuratie van de ene service de andere ‘bijt’ door conflicterende afhankelijkheden. Dit doet Docker door gebruik te maken van zogenoemde containers. Iedere container draait een service, waarbij alle bestanden voor die service in die container bevat zijn. Containers kunnen onderling verkeer sturen middels een virtueel netwerk op de server en via een vorm van NAT en portforwarding met de buitenwereld praten. De service die in een container draait wordt ook wel een microservice genoemd.
Het leuke aan een Docker container is dat deze een complete installatie vormt. Een container wordt eenmaal gebouwd en kan dan gedistribueerd worden over meerdere hosts. Voor vele services bestaat er een originele Docker container die via het internet automatisch kan worden gelanceerd. Bij het eerste gebruik wordt de laatste (of een specifieke) versie gedownload, waarna telkens de lokale versie zal worden gebruikt tot er een nieuwere is.
Om Docker te kunnen gebruiken zal deze als service (dokkerd) op de host moeten worden geïnstalleerd. Daarna kunnen containers beheerd worden via diverse Docker commando’s. Dit Proces kan worden vereenvoudigd door gebruik te maken van Docker-Compose. Dit is een additionele applicatie die werkt met .yml bestanden. In de bestanden worden de parameters opgenomen die je normaal gesproken op de commandline opgeeft.
Om het beheer van de containers nog makkelijker te maken is Portainer ontwikkeld. Portainer biedt een web interface om Docker containers te beheren, en kan zelf als microservice in een container draaien. Wanneer de basis Docker/docker-compose/portainer draait heb je een goede basis om de Docker omgeving te beheren, containers toe te voegen, weg te halen, te starten en te stoppen. Let er daarbij op dat Docker containers standaard voor het x86 platform gemaakt worden en gebaseerd zijn op Linux. Voor andere processorarchitecturen als ARM voor de Raspberry Pi moet je dus een Docker container kiezen die voor een ARM gebouwd is.
Data persistentie met Docker Volumes
Ah, allemaal leuk en aardig dat alles in een Docker container staat. Maar als je je container herinstalleert of vervangt voor een nieuwe ben je je configuratie en opgeslagen data kwijt. Daar gaat je in een container gehoste website! Maar daar is natuurlijk een oplossing voor gevonden. En daar speelt de Linux/Unix omgeving nu een belangrijke rol.
Hoe werkt schijfgebruik onder een Unix omgeving? Iedere (partitie op) een harde schijf wordt een in de Unix wereld een volume genoemd. En om een volume te gebruiken in je opslag dien je dit te mounten in je folder structuur. Deze structuur begint bij de wortel (de root, aangegeven met / ). Bij een mount verbindt je een volume aan een mapnaam. Iedere container heeft zijn gescheiden en besloten opslagomgeving (dus zijn eigen / ). Docker staat het toe om een map op de host als een volume te koppelen aan de container. De map op de host en al zijn subdirectories komen dan te staan onder het punt dat je opgeeft. OP die manier kun je dus data ‘in de container’ opslaan en gebruiken die zich buiten de container bevindt en blijft bestaan wanneer de container verwijderd wordt. Door slim mappen te koppelen waar configuratie of data wordt opgeslagen kun je deze dus persistent maken. Welke mappen je koppelt is dan afhankelijk van de service.
Belangrijke Variabelen
Bij de configuratie zijn onder andere de volgende variabelen dan ook belangrijk om mee te geven:
- Containernaam
- Dockercontainer en versie
- ‘Port forwarding’ host:container
- Volumes:mountpunt
Meer informatie is te vinden bij de volgende tutorial handbooks (zeker lezen wanneer je met Docker aan de slag wilt gaan):
- https://blog.ssdnodes.com/blog/what-is-self-hosting/ (en we doen dit lekker wel op een lokale server… anders is het gen ‘self’hosting, toch? Dan noemen we dat gewoon hosting!)
- https://blog.ssdnodes.com/blog/self-hosting-handbook/
- https://blog.ssdnodes.com/blog/self-hosting-handbook/
- https://blog.ssdnodes.com/blog/getting-started-docker-vps/
Interessant !
En het wordt nog interessanter wanneer je meerdere hosts met Docker in een zogeheten Docker Swarm gaat gebruiken.
Omdat Yunohost vast staat in het moeras met een Rasberry Pi5 ben ik gestart met het verdiepen in Docker
Op Youtube heb ik een aantal tutorials gevonden met de basis wat Docker is en wat je er mee kan doen.
Networking is ook wel een belangrijk element en ik vond deze wel heel duidelijk en geeft mij een aardig beeld hoe ik het wil gaan bouwen.
In mijn geval is NGINXManager wel een goede kandidaat voor een Reverse Proxy Manager.
Dit is een aardige tutorial
Best straight forward 👍
Die Chuck kan het atijd goed uitleggen. Hij steekt er ook veel tijd in om tot een rond verhaal te komen. Soms stapt hij wel te makkelijk over bepaalde details heen.
Naast Nextcloud en Wortdpress (STA Website) zit ik er over na te denken om een container van Bitwarden te draaien.
Dat wil ik ook en om dezelfde reden. Ik heb Bitwarden al wel geinstallleerd op Yunohost maar ik kom er niet veel verder mee.
subdomein toegewezen aan de app? Wanneer Vaultwarden geīnstalleerd is zou je met de bitwarden client een verbinding moeten kunnen maken met je subdomein. Ik heb er al een keertje mee gespeeld nog op dietpi.
Dat wil ik ook en om dezelfde reden. Ik heb Bitwarden al wel geinstallleerd op Yunohost maar ik kom er niet veel verder mee.
Wat is het probleem of uitdaging ?