Docker is een gratis en opensource-oplossing voor het ontwikkelen, implementeren en beheren van apps in lichte virtualisatie op OS-niveau. In deze handleiding demonstreren we hoe je een Python-app maakt binnen een Docker-container.
Vereisten
Om de stappen in deze handleiding uit te voeren, heb je de volgende onderdelen nodig:
Een Linux-systeem. Bekijk hoe je je eigen Ubuntu VPS op CloudSigma configureert.
De nieuwste versie van Docker is geïnstalleerd en geconfigureerd. Lees meer over Docker installeren op Ubuntu.
Docker-containers
Wanneer je verschillende programma’s binnen dezelfde omgeving uitvoert, kunnen dingen stukgaan — en dat zal ook gebeuren. Hoe meer programma’s je toevoegt, hoe instabieler het wordt. Voor gemiddelde gebruikers is dat misschien geen groot probleem. Bij bedrijfskritieke applicaties kunnen de gevolgen echter ernstig zijn.
Hoe meer apps aan het systeem worden toegevoegd, hoe groter het aanvalsoppervlak. Eén gecompromitteerde app kan gemakkelijk leiden tot de ondergang van het volledige systeem.
Om deze problemen op te lossen, kunnen we Docker-containers gebruiken voor sandboxing op softwareniveau:
Apps binnen de container hebben beperkte toegang tot bestanden.
Gecontaineriseerde apps kunnen andere processen die op het systeem draaien niet zien.
Aan de container kan een specifieke hoeveelheid hardwareresources worden toegewezen.
Netwerkpoorten van een container worden niet naar buiten blootgesteld.
Consistente packaging van vrijwel alles in lokale/productieomgevingen.
Ter demonstratie bouwen we een eenvoudige Python-server binnen een Docker-container, zetten we de container om in een image en implementeren we de image binnen een dummy-productieomgeving.
Stap 1 – Bestandssysteemconfiguratie
Om het project te hosten, maken we eerst een speciale directory:
1 | mkdir -pv python-server-container/ |
1 | cd !$ |
Maak binnen de directory een subdirectory src om onze code op te slaan:
1 | mkdir -pv src/ |

Stap 2 – De Python-server bouwen
In deze stap maken we een eenvoudige HTTP-server in Python. Maak het bestand server.py:
Open het in een teksteditor:

Voer de volgende Python-code in:

Hierbij geldt:
We gebruiken de HTTPServer-klasse en vragen een handler op uit de standaardbibliotheek van Python, zodat het programma eenvoudig blijft.
De functie run initialiseert een instantie van de HTTPserver.
Zoals de argumenten van server_address aangeven, luistert de server naar elke binnenkomende verbinding op poort 8080.
Nu controleren we of de server werkt zoals verwacht. Start de server:
![]()
Vanuit een nieuwe terminal kunnen we curl gebruiken om een verzoek naar de server te sturen:

Als alternatief kun je de link openen in een webbrowser:

Stap 3 – Een Dockerfile maken
Een Dockerfile bevat de benodigde instructies om een Docker-image te genereren. De instructies in het bestand worden opeenvolgend uitgevoerd. Lees meer over Dockerfile.
Maak een nieuwe Dockerfile voor ons project:
Nu voegen we de benodigde code toe. Open het bestand in een teksteditor:
Voer de volgende code in:
Hierbij geldt:
Elke Dockerfile moet beginnen met de FROM-directive. In ons geval declareren we Python als basis van de Docker-image.
De ENV SRC_DIR-directive specificeert de locatie van de containerdirectory.
De COPY-directive kopieert de bestanden uit de src-directory die momenteel de Python-server bevat.
De variabele PYTHONBUFFERED=1 geeft aan dat Python uitvoer en logs direct naar STDOUT schrijft. Anders zouden de logs niet naar een buffer worden verzonden.
De CMD-directive specificeert een standaardopdracht die wordt uitgevoerd wanneer de container start. In dit geval gebruiken we de directive om onze Python-server te starten.
Stap 4 – Docker-image genereren
Nu de Dockerfile klaar is, kunnen we een image bouwen. Voer de volgende Docker-opdracht uit om het proces te starten:

Hierbij geldt:
De -t-flag wordt gebruikt om onze Docker-image te taggen als python_server.
Docker downloadt alle benodigde componenten en combineert ze tot een image.
Stap 5 – De image uitvoeren
De image is klaar voor implementatie. We kunnen deze uitvoeren met de volgende opdracht:

Hier sturen we poort 8080 van de lokale machine door naar de Docker-image met behulp van de -p-flag.
We kunnen eenvoudig controleren of de server actief is met curl:

Stap 6 – De server beëindigen
Druk vanuit de terminal op “Ctrl + C” om het Docker-proces te beëindigen:

Stap 7 – De Docker-image exporteren en importeren
We hebben nu een werkende Docker-image waarop onze Python-server draait. Met behulp van de export- en importfuncties van Docker kunnen we deze naar elk ander systeem migreren.
Controleer eerst de lijst met Docker-images op het huidige systeem:

Ons doel is de Docker-image python_server die we zojuist hebben gemaakt. Met de volgende opdracht exporteer je deze als een TAR-archief:

Nadat je het bestand python_server.tar naar de doelmachine hebt overgezet, gebruik je de volgende opdracht om de Docker-image te importeren:

Slotgedachten
In deze handleiding hebben we gedemonstreerd hoe je een Docker-image bouwt op basis van een Python-applicatie. We hebben een eenvoudige Python-webserver gemaakt en daaruit een Docker-image gebouwd. De Docker-image kan nu in elke omgeving worden geïmplementeerd en consistent gedrag leveren.
Wil je meer leren over Docker? Bekijk de volgende handleidingen:
Een Flask-applicatie bouwen en implementeren met Docker op Ubuntu 20.04
Een Django-applicatie beveiligen en schalen met Docker, Nginx en Let’s Encrypt
WordPress implementeren met Docker-containers op Ubuntu 20.04
Veel computerplezier!

Reacties
Nog geen reacties. Wees de eerste.