Terug naar blog

Een Python-app containeriseren met Docker

Een Python-app containeriseren met Docker

Docker is een gratis en open-source oplossing voor het ontwikkelen, implementeren en beheren van apps in lichtgewicht virtualisatie op besturingssysteemniveau. In deze handleiding laten we zien hoe u een Python app maakt binnen een Docker-container.

Vereisten

Om de stappen in deze handleiding uit te voeren, heeft u de volgende componenten nodig:

Docker-containers

Wanneer u verschillende programma's binnen dezelfde omgeving uitvoert, kunnen er dingen kapotgaan (en dat zal ook gebeuren). Hoe meer programma's u toevoegt, hoe onstabieler het wordt. Voor de gemiddelde persoon is dat misschien geen groot probleem. Als het echter gaat om bedrijfskritische toepassingen, kan dit ernstige gevolgen hebben.

Hoe meer apps er in het systeem worden geïntroduceerd, hoe groter het aanvalsoppervlak. Een enkele gecompromitteerde app kan gemakkelijk leiden tot de ondergang van het hele 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 geen andere processen zien die in het systeem draaien.

  • Aan de container kan een specifieke hoeveelheid hardwarebronnen worden toegewezen.

  • Netwerkpoorten van een container worden niet naar buiten toe blootgesteld.

  • Consistente verpakking van vrijwel alles over lokale/productieomgevingen.

Ter demonstratie gaan we een eenvoudige Python-server bouwen binnen een Docker-container, de container omzetten in een image en de image implementeren in een fictieve productieomgeving.

Stap 1 – Bestandssysteemconfiguratie

Om het project te hosten, gaan we eerst een speciale map aanmaken:

Maak binnen de map een submap aan src om onze code in op te slaan:

Stap 2 – De Python-server bouwen

In deze stap gaan we een eenvoudige HTTP-server in Python maken. Maak het bestand aan server.py:

Open het in een teksteditor:

Voer de volgende Python-code in:

Hier,

  • We gebruiken de HTTPServer-klasse en vragen een handler aan uit de standaard Python-bibliotheek, waardoor het programma eenvoudig blijft.

  • De functie run start een instantie van de HTTPserver.

  • Zoals de argumenten van server_address suggereren, zal de server luisteren naar elke inkomende verbinding op poort 8080.

Nu gaan we controleren of de server naar verwachting werkt. Start de server:

Vanuit een nieuwe terminal kunnen we curl gebruiken om een verzoek naar de server te sturen:

Als alternatief kunt u 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 zullen we de benodigde codes erin zetten. Open het in een teksteditor:

Voer de volgende code in:

Hier,

  • Elke Dockerfile moet beginnen met de FROM instructie. In ons geval declareren we Python als de basis van de Docker-image.

  • De ENV SRC_DIR instructie specificeert de locatie van de containermap.

  • De COPY instructie kopieert de bestanden uit de src map die momenteel de Python-server host.

  • De variabele PYTHONBUFFERED=1 specificeert dat Python uitvoer rechtstreeks zal printen en loggen naar STDOUT. Anders zouden de logs niet naar een buffer worden verzonden.

  • De CMD instructie specificeert een standaardcommando dat moet worden uitgevoerd bij het starten van de container. In dit geval gebruiken we de instructie om onze Python-server te starten.

Stap 4 – Docker-image genereren

Nu de Dockerfile gereed is, kunnen we een image bouwen. Voer het volgende Docker-commando uit om het proces te starten:

Hier,

  • De -t vlag wordt gebruikt om onze Docker-image te taggen als python_server.

  • Docker zal alle benodigde componenten downloaden en deze combineren in een image.

Stap 5 – De image uitvoeren

De image is klaar voor implementatie. We kunnen deze uitvoeren met het volgende commando:

Hier sturen we poort 8080 van de lokale machine door naar de Docker-image met behulp van de -p vlag.

We kunnen eenvoudig controleren of de server actief is met behulp van curl:

Stap 6 – De server beëindigen

Druk in de terminal op “Ctrl + C” om het Docker-proces te beëindigen:

Stap 7 – De Docker-image exporteren en importeren

We hebben nu een functionele Docker-image die onze Python-server host. 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 python_server Docker-image die we zojuist hebben gemaakt. Het volgende commando exporteert deze als een TAR-archief:

Na het overzetten van het python_server.tar-bestand naar de doelmachine, gebruikt u het volgende commando om de Docker-image te importeren:

Tot slot

In deze handleiding hebben we gedemonstreerd hoe u een Docker-image bouwt van een Python-applicatie. We hebben een eenvoudige Python-webserver gemaakt en daar een Docker-image van gebouwd. De Docker-image kan nu in elke omgeving worden geïmplementeerd met de verwachting van consistent gedrag.

Wilt u meer leren over Docker? Bekijk dan de volgende handleidingen:

Veel computerplezier!

author

Preslav Dobrev

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.