Inleiding
Containerisatie heeft de afgelopen jaren een enorme vlucht genomen in de software-techwereld. Dit kan worden toegeschreven aan Docker dat een containerplatform is dat het beheer van processen binnen containers vereenvoudigt.
Containers zijn lichtgewicht, gevirtualiseerde, draagbare, softwaregedefinieerde gestandaardiseerde omgevingen waarmee software geïsoleerd kan draaien van andere software die op de fysieke hostmachine draait. Dankzij deze draagbaarheid kunnen ontwikkelaars hun applicaties modulariseren in geïsoleerde services. Bovendien kunnen ze onafhankelijk worden aangeboden, wat ruimte biedt voor schalen.
Hoewel het opsplitsen van een applicatie in meerdere services absoluut geweldig is, brengt het de overhead met zich mee van het beheren van verschillende containers. Je moet ervoor zorgen dat ze communiceren, tegelijkertijd opstarten en afsluiten. Dankzij een tool genaamd Docker Compose, wordt dit een eenvoudige taak. Met Docker Compose kunnen ontwikkelaars Docker-applicaties met meerdere containers uitvoeren met behulp van regels die zijn gedefinieerd in een YAML bestand. Het YAML-bestand bevat definities voor de applicatieservices en hoe ze datavolumes en netwerken kunnen delen. Zodra je de services hebt gedefinieerd, kun je ze allemaal met één enkele opdracht opstarten. In deze handleiding laten we je zien hoe je Docker Compose installeert, configureert en ermee aan de slag gaat op Ubuntu 20.04.
Vereisten
-
Aangezien dit een praktische handleiding is, moet je een installatie van Ubuntu 20.04 hebben als je initiële besturingsomgeving. Je moet ook een niet-rootgebruiker met sudo-privileges hebben. Hier is een stap-voor-stap handleiding om je te helpen je Ubuntu-server in te richten. Volg deze handleiding om je sudoers-bestand te configureren.
-
Je moet ook Docker installeren. Raadpleeg deze handleiding over hoe je Docker installeert en bedient op Ubuntu 18.04.
Stap 1: Docker Compose installeren
We downloaden de nieuwste stabiele versie van Docker Compose van de officiële GitHub-repository. Je kunt de nieuwste versie vinden op de releases-pagina, op het moment van schrijven van deze handleiding is de nieuwste versie 1.28.5.
Log eerst in op je Ubuntu-server met de niet-root sudo-gebruiker en voer de volgende opdracht in. Hiermee wordt de nieuwste release (1.28.5) gedownload en wordt het uitvoerbare bestand opgeslagen in de /usr/local/bin/docker-compose map. Dit maakt het wereldwijd toegankelijk als docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
Zodra het is gedownload, voer je de volgende opdracht in om de juiste machtigingen in te stellen zodat de docker-compose-opdracht kan worden uitgevoerd:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Controleer nu of de installatie is geslaagd en of de opdracht kan worden aangeroepen door de volgende opdracht uit te voeren:
|
1 |
docker-compose –version |
Je zou een uitvoer als deze moeten krijgen:

Dit bevestigt dat Docker Compose met succes op je systeem is geïnstalleerd.
Stap 2: Het docker-compose.yml-bestand maken
Om je te helpen begrijpen hoe je met docker-compose.yml, werkt, configureren we een webserveromgeving met behulp van de officiële Nginx-image van Docker Hub. Eenmaal geïmplementeerd, zouden we een eenvoudige HTML-pagina vanuit de container moeten kunnen aanbieden.
We maken onze werkmap aan in de thuismap van waaruit we zullen werken. Voer de volgende opdracht in om de map te maken:
|
1 |
mkdir ~/compose-example |
Ga vervolgens naar de map:
|
1 |
cd ~/compose-example |
Eenmaal in de map maak je een applicatiemap die de document-root zal zijn voor de Nginx-omgeving. We kunnen deze map app:
|
1 |
mkdir app |
- Een HTML-pagina maken
Laten we de nano-teksteditor gebruiken om het index.html-bestand in de app-map te maken:
|
1 |
nano app/index.html |
Voeg vervolgens de volgende HTML-code toe aan het bestand:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="nl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Compose-voorbeeld</title> <!-- Bootstrap-basis-CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Geweldig Docker Compose-voorbeeld met CloudSigma</h1> <p class="h4"> Dit is een basis statische HTML-pagina. </p> <p class="lead text-muted"> Deze pagina wordt geserveerd vanuit een Nginx Docker-container gebouwd met <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
Om het bestand op te slaan, drukt u op CTRL +O, ENTER. Sluit vervolgens met CTRL +X. Vervolgens maken we het docker-compose.yml-bestand in de hoofdmap van ons project.
- De HTML-pagina hosten met docker-compose
Voer vervolgens de volgende opdracht uit om het bestand te openen met de nano-editor:
|
1 |
nano docker-compose.yml |
Voeg daarna het volgende codefragment toe aan het bestand:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
Het docker-compose.yml bestand begint met het versienummer dat Docker Compose vertelt welke configuratieversie we gebruiken. Volg deze link om meer te leren over Docker Compose-versiebeheer.
Na het versienummer hebben we het services-blok dat de services bevat die de omgeving vormen. In deze handleiding hebben we slechts één service gespecificeerd genaamd webserver. De webserver service zal de nginx:alpine image gebruiken. We hebben ook de poortdoorsturing gedefinieerd 8000:80. Dit betekent dat alle verzoeken van poort 8000 op de hostmachine worden doorgestuurd naar de webserver-container op poort 80, waar Nginx draait.
De volumes-richtlijn stelt u in staat om een gedeeld volume te maken tussen de hostmachine en de container die we kunnen gebruiken om gegevens te behouden. In ons yml codefragment, delen we de lokale app map met de container. Binnen de container wordt deze geplaatst op de /usr/share/nginx/html locatie. Hiermee wordt de standaard document root voor Nginx overschreven. U kunt het bestand nu opslaan en sluiten.
Tot nu toe hebt u uw voorbeeld-HTML-webpagina en het docker-compose.yml-bestand gemaakt met instructies om een gecontaineriseerde webserveromgeving te bouwen. Laten we in de volgende stap kijken hoe we deze installatie kunnen starten.
Stap 3: Het Docker Compose-commando uitvoeren
In deze stap voeren we het commando uit om onze gecontaineriseerde omgeving te starten. Hieronder staat het enkele commando dat het downloadproces van de Docker-images initialiseert, een container voor de webserver-service maakt en de gecontaineriseerde omgeving op de achtergrond start:
|
1 |
docker-compose up -d |
Docker is ontworpen om snel en efficiënt te zijn, dus wanneer u het bovenstaande commando uitvoert, controleert het eerst uw lokale systeem op de gedefinieerde image. Als deze ontbreekt, wordt deze opgehaald uit de Docker Hub-repository. Het zou een uitvoer moeten tonen die vergelijkbaar is met dit:

Wanneer het commando klaar is met uitvoeren, start het de containeromgeving op de achtergrond. U kunt controleren of deze actief is met het commando:
|
1 |
docker-compose ps |
U zou een vergelijkbare uitvoer moeten krijgen:

Als u naar het IP-adres of de domeinnaam van uw server navigeert en poort 8000 toevoegt, d.w.z. server_domain_or_IP:8000 zou u de voorbeeld-HTML-pagina moeten kunnen zien die we hebben gemaakt:

Als u zich herinnert, hebben we een gedeeld volume ingesteld tussen de container en het hostsysteem. Dit houdt de bestanden in de container gesynchroniseerd met de bestanden op het hostsysteem. Dus als u een wijziging aanbrengt in het index.html bestand, wordt dit automatisch gesynchroniseerd met de container en weerspiegeld wanneer u de pagina in de browser opnieuw laadt. U kunt het proberen met de nano-editor. Laten we in de volgende stap nog wat meer commando's leren.
Stap 4: Aanvullende Docker Compose-commando's voor het beheren van containeromgevingen
Nu u met succes een webpagina hebt geïmplementeerd met het enkele docker-compose-up-commando, laten we enkele aanvullende commando's bekijken die nuttig kunnen zijn bij het beheren van gecontaineriseerde omgevingen.
We beginnen met het logs-commando. Logs kunnen cruciaal zijn wanneer u problemen met uw applicatie oplost. Voer eerst het volgende commando uit om de logs te bekijken die door de Nginx-container zijn geproduceerd:
|
1 |
docker-compose logs |
Hier is een voorbeeld van de uitvoer van de logs:

U kunt de uitvoering van de omgeving pauzeren zonder de status van de containers te wijzigen met het commando:
|
1 |
docker-compose pause |
![]()
Gebruik vervolgens het volgende commando om de uitvoering te hervatten:
|
1 |
docker-compose unpause |
![]()
Mogelijk wilt u de containers stoppen zonder hun gegevens te vernietigen. Gebruik hiervoor het volgende commando:
|
1 |
docker-compose stop |
![]()
Om de containers, netwerken en volumes die bij de gecontaineriseerde omgeving horen te vernietigen, gebruikt u het commando:
|
1 |
docker-compose down |
![]()
Houd er rekening mee dat het bovenstaande commando de basisimages die door Docker Compose worden gebruikt om de omgeving te starten, niet verwijdert. Dit zorgt voor snellere builds wanneer je je omgeving opstart, omdat er op de lokale machine wordt gezocht naar overeenkomstige images. Als je de basisimage volledig wilt verwijderen, moet je dit in het commando specificeren. Voor ons voorbeeld kunnen we de nginx:alpine image verwijderen met het commando:
|
1 |
docker image rm nginx:alpine |

Ten slotte kun je meer commando's vinden in de officiële Docker Compose Command-line reference documentatie.
Conclusie
In deze handleiding heb je Docker Compose geïnstalleerd op Ubuntu 20.04, een gecontaineriseerde omgeving gemaakt op basis van een Nginx-webserverimage, en geleerd hoe je de verschillende services kunt beheren met behulp van Docker Compose-commando's.
Als je wilt leren hoe je een echte dynamische applicatie implementeert die afhankelijk is van verschillende containers, lees dan onze handleiding over Laravel, Nginx en MySQL implementeren met Docker Compose. Je kunt ook een volledige lijst van docker-compose-commando's vinden in de officiële Docker Compose-documentatie.
Veel plezier met computeren!
Reacties
Nog geen reacties. Wees de eerste.