Docker Compose - SebastiaanPr/IT-Landscape GitHub Wiki
Wat is Docker Compose
Docker Compose is een tool gebruikt voor het makkelijk definiëren en beheren van multi-container Docker applicaties. Het gebruikt een configuratie bestand gemaakt voor het maken en starten van services. Hoe is dat mogelijk? Dat is mogelijk doordat Docker Compose een YAML configuratie gebruikt. Het laat je toe om services te beschrijven en hun benodigdheden te kunnen schrijven als code natuurlijk moet did correct worden gedaan zoals het YAML-bestand het beschrijft. Het staat ook toe voor alle services te starten met 1 commando. Het docker-compose.yml bestand geeft je dus de mogelijkheid om services te definieeren. Je kan ook relaties tussen services definiëren zoals de afhankelijkheden. Ook kan je de omgevingen variabelen definiëren dit zorgt ervoor dat je gemakkelijk en consistent kan werken in de zelfde omgeving.
Waarvoor dient Docker Compose
Veel software tegenwoordig gebruiken meerdere services die allemaal hun eigen afhankelijkheden hebben. Stel dat we een container hebben met daarin een web-app voor een online bibliotheek. Alle boeken en de namen van de autheurs van die boeken zouden worden opgeslagen in een database die zich bevindt in een andere container. Docker Compose dient eigenlijk als een tool waardoor je deze 2 gemakkelijker samen kan gebruiken. Dit kan door zoals eerder aangehaalt doordat je wat controlen hebt over omgevings variable, opslag volumes, poorten, etc. En bovendien kan je ook alle services tegelijk starten zonder dat je aparte configuratie nodig hebt voor elke container.
Voorbeeld
Voor het voorbeeld ga ik een Docker Compose gebruiken voor het maken en starten van een Minecraft server.
De Docker-Compose.yml begint met het element services. Services is een top-level element dat elke meeste Compose bestanden hebben. Het dient als een map waar service namen in worden gedefinieerd. Het volgende is de service definition of de naam van de service in dit geval Minecraft. Dit gaat de configuratie toepassen van elke service container.
Dan komt het eerste werkelijke element van de service in dit geval image. Image specifieert welke image de container moet gebruiken om te starten. Gevold door image is Container_name. Heel gemakkelijk dit geeft een naam aan de container die gemaakt word namelijk Sebastiaan_server.
het attribuut mem_limit zorgt ervoor dat het geheugen dat een container kan gebruiken gelimiteerd is. In dit geval 1500 MB.
Ports is het volgende attribuut in de rij. Ports definieert de port mapping tussen het toestel van de beheerder en de container. Hier word ports gebruikt in 2 delen het linken deel is de poort van de beheerder en het rechter deel van de container. Er word poort 25565 gebruikt omdat dit de standaard poort is bij Minecraft-servers.
Het environment attribuut erna zorgt voor het bepalen van omgeving variabelen. In het geval van het voorbeeld wilt Minecraft dat gebruikers akkoord gaan met hun End-user license agreement (EULA). Dit is iets wat normaal met de hand moet worden gedaan, maar door environment attribuut gebeurd dit automatisch door deze op "true" te zetten. Als je dit niet doet werkt de server niet.
Ten slotte is er nog het attribuut volumes dat zorgt ervoor dat gegevens kunnen worden opgeslagen in het voorbeeld worden gegevens 2 keer opgeslagen de 1 keer is in een map op het systeem van de gebruiker dat is de map "/minecraft_data". De 2 keer worden dezelfde gegevens opgeslagen binnen een map in de container "/data". Dit word gedaan zodat wanneer je de container verwijderd je niet alle data kwijt bent. De gegevens die worden bijgehouden zijn dingen zoals de EULA, informatie over de wereld, instellingen en nog andere.