Contents

8 Docker Best Practices die u moet weten

Belangrijkste opmerkingen

Het gebruik van officieel goedgekeurde Docker-images kan zorgen voor betere beveiliging en prestaties, terwijl het maken van aangepaste images kan leiden tot suboptimale configuraties en langere bouwtijden.

Om mogelijke problemen met betrekking tot onvoorzien gedrag en conflicterende afhankelijkheden te beperken, is het raadzaam om bepaalde instanties van Docker-images te gebruiken door ze te trekken en te bouwen op basis van een gespecificeerde versie.

Gebruik het commando “docker scan” om een uitgebreide analyse van Docker-images uit te voeren om hun beveiligingsniveau vast te stellen en ervoor te zorgen dat ze voldoen aan de vereisten van uw toepassing.

Docker is een wijdverspreid hulpmiddel geworden voor het containeriseren van applicaties; de doeltreffendheid ervan kan echter in gevaar komen als mensen zich niet houden aan vastgestelde best practices. Het verwaarlozen van dergelijke richtlijnen kan systemen blootstellen aan potentiële beveiligingsrisico’s en de algehele prestaties belemmeren.

Om de mogelijkheden van Docker effectief te gebruiken en tegelijkertijd te zorgen voor optimale beveiliging en het maken van goed georganiseerde containerconfiguratiebestanden, kun je overwegen deze aanbevolen strategieën toe te passen. Door deze best practices te volgen, verbetert u uw algemene ervaring met Docker en minimaliseert u potentiële kwetsbaarheden in uw applicaties.

Gebruik Officiële Docker Images

Wanneer je je applicatie in een gecontaineriseerde omgeving implementeert, is het noodzakelijk om een Docker image te gebruiken. Er zijn twee primaire opties beschikbaar om dit image te maken - ofwel door een configuratie op maat te maken of door gebruik te maken van reeds bestaande images die door Docker zelf worden geleverd.

Het maken van aangepaste visuals houdt in dat je de volledige verantwoordelijkheid neemt voor het afhandelen van alle relevante configuraties. Ter illustratie, bij het maken van een image bedoeld voor implementatie met een Node.js applicatie, is het noodzakelijk om zowel Node.js als alle geassocieerde vereiste componenten te verkrijgen en te installeren. Hoewel deze onderneming bewerkelijk kan zijn en kan leiden tot onvolledige of foutieve instellingen, biedt het niettemin een hoge mate van flexibiliteit en controle over het eindproduct.

Docker raadt aan om een officieel node.js-image te gebruiken met alle juiste afhankelijkheden. Docker-images hebben betere beveiligingsmaatregelen, zijn lichtgewicht en zijn getest voor verschillende omgevingen. Je kunt de officiële images vinden op Docker’s officiële images pagina.

/nl/images/docker-official-images-page-1.jpg

Gebruik specifieke versies van Docker-images

In het algemeen betekent het ophalen van een gezaghebbende image het verkrijgen van de meest recente tag, die de huidige iteratie van die image aangeeft.Bijgevolg zal elke keer dat een container wordt gebouwd met behulp van deze image resulteren in een unieke variatie van de vorige container.

Het gebruik van een verscheidenheid aan verschillende Docker image iteraties binnen het ontwikkelingsproces van een applicatie kan resulteren in onvoorziene functionaliteiten, aangezien deze verschillende versies in conflict kunnen komen met aanvullende vereisten en uiteindelijk kunnen leiden tot het slecht functioneren van het programma.

Docker stelt voor om images van een bepaalde versie te gebruiken voor het trekken en bouwen, omdat officiële images uitgebreide documentatie bevatten en tegemoetkomen aan veelvoorkomende toepassingsscenario’s.

In plaats van een algemeen commando zoals “docker pull alpine” uit te voeren, wat kan resulteren in het gebruik van een ongedefinieerde of niet-ondersteunde versie, zou men een specifieke versie moeten specificeren, zoals “docker pull alpine:3.18”. Dit zorgt voor consistentie en vermindert mogelijke problemen tijdens volgende bouwprocessen door een bekende en ondersteunde versie van het image te gebruiken. Raadpleeg de officiële Docker image repository voor meer informatie over beschikbare images en hun bijbehorende Dockerfile links.

/nl/images/docker-images-various-tags-1.jpg

Afbeeldingen scannen op veiligheidslekken

Een manier om ervoor te zorgen dat een digitale image, zoals een Docker-container, vrij is van veiligheidslekken is door de inhoud grondig te scannen. Dit proces kan worden bereikt door het commando “docker scan” te gebruiken, dat een specifieke syntaxis gebruikt voor een juiste uitvoering.

 docker scan [IMAGE] 

Om een beoordeling van beveiligingsproblemen op een Docker container image uit te voeren, is het noodzakelijk om te authenticeren en verbinding te maken met het Docker-platform.

 docker login 

Selecteer vervolgens het image dat u wilt analyseren door het te scannen met een QR-code of door de URL in te voeren in het daarvoor bestemde veld van de interface van de applicatie.

 docker scan ubuntu:latest 

/nl/images/results-of-scanning-a-docker-image.jpg

Een hulpprogramma genaamd Synk scant de afbeelding en geeft een lijst van kwetsbaarheden op basis van hun ernst. Je ziet het type kwetsbaarheid en links naar informatie over de kwetsbaarheid, inclusief hoe je deze kunt verhelpen. Aan de hand van de scan kun je zien of de image veilig genoeg is voor je applicatie.

Gebruik kleine Docker-images

Bij het verkrijgen van een Docker-image wordt het vergezeld door een reeks vooraf geïnstalleerde systeemhulpprogramma’s die bijdragen aan een grotere totale omvang die onnodige tools omvat.

Het gebruik van grote Docker-snapshots verbruikt veel opslagcapaciteit en kan de operationele efficiëntie van gecontaineriseerde applicaties belemmeren vanwege hun grotere omvang.Bovendien zorgen deze grotere images voor een grotere kans op potentiële beveiligingsinbreuken.

Het optimaliseren van de afmetingen van Docker-containers door het gebruik van alpine-gebaseerde images is een haalbare strategie om de operationele efficiëntie te verbeteren. Door deze minimalistische images te gebruiken, die alleen onmisbare componenten bevatten, minimaliseer je effectief de opslagvereisten terwijl je snelle en vindingrijke prestaties voor je applicaties bevordert.

Een reeks officieel goedgekeurde afbeeldingen van Alpine is te vinden op Docker, met voorbeelden waaronder die voor PostgreSQL. Hieronder staat een voorbeeld van Alpine iteraties in relatie tot PostgreSQL:

/nl/images/apline-image-versions-for-postgresql.jpg

Caching Image Layers optimaliseren

Elke richtlijn binnen een Dockerfile vormt een laag in de grafische weergave van de afbeelding. Deze lagen omvatten verschillende praktische toepassingen en voeren een reeks taken uit. Door de officieel goedgekeurde repositories die worden gehost door Docker Hub te onderzoeken, kan men de richtlijnen onderscheiden die zijn gebruikt tijdens het maken ervan.

Dockerfiles bevatten alle noodzakelijke componenten voor het genereren van een image, wat een belangrijke reden is achter de populariteit onder ontwikkelaars ten opzichte van traditionele virtuele machines.

Hieronder staat een illustratie van een typische Alpine image, die uit de volgende componenten bestaat:

/nl/images/alpine-image-layers-1.jpg

Wanneer je images gebruikt als basis voor het bouwen van je applicatie, worden er extra lagen op aangebracht. Het proces van het uitvoeren van commando’s in een Dockerfile verloopt van boven naar beneden, waarbij elke wijziging een reconstructie van de volgende lagen door Docker vereist.

Om de efficiëntie en consistentie van containerisatieprocessen te optimaliseren, is het raadzaam om een Dockerfile zo te structureren dat de minst veranderlijke componenten eerst worden opgesomd, gevolgd door die met een hogere mate van veranderlijkheid. Bijgevolg moeten statische configuraties, zoals installaties, aan het begin van het bestand staan om het onderhoud en de reproduceerbaarheid te vergemakkelijken.

Docker maakt gebruik van het concept van lagen om de bouwprestaties te optimaliseren door images te bouwen die alleen bestaan uit gewijzigde bestanden. Terwijl elke laag bovenop zijn voorganger wordt gemaakt, worden alle bestanden die ongewijzigd blijven in de cache bovenop de image geplaatst, waardoor volgende operaties die op deze ongewijzigde elementen steunen sneller verlopen. Deze aanpak vermindert niet alleen redundantie, maar verbetert ook de algehele efficiëntie in het bouwproces.

/nl/images/how-to-arrange-instructions-in-dockerfile.jpg

Let op de afgebeelde illustratie in de bovenstaande afbeelding.In dit scenario zal Docker, als er wijzigingen worden aangebracht in de applicatiebestanden, het bouwproces starten op basis van deze wijzigingen, waardoor een extra installatie van npm-pakketten niet nodig is.

Het opnemen van een bestaande image als basis voor de bouw kan de algehele procedure versnellen in vergelijking met het starten van een nieuwe reconstructie van alle volgende lagen. Daarnaast verbetert caching de snelheid waarmee pull- en pushbewerkingen op Docker Hub worden uitgevoerd bij het werken met containerimages.

Gebruik een .dockerignore bestand

Bij het bouwen van een image met een Dockerfile is het denkbaar dat men vertrouwelijkheid wil bewaren over specifieke gegevens die betrekking hebben op het project. Bepaalde documenten en mappen kunnen een prominente plaats innemen binnen het project, maar hoeven niet noodzakelijk opgenomen te worden tijdens de constructiefase.

Het gebruik van een .dockerignore bestand kan de grootte van een image aanzienlijk beperken, omdat het alleen de benodigde componenten bevat tijdens de constructiefase. Bovendien vergemakkelijkt deze aanpak de bescherming van gevoelige informatie zoals vertrouwelijke sleutels en wachtwoorden door te voorkomen dat ze onbedoeld worden vrijgegeven.

Het .dockerignore bestand is een op tekst gebaseerd configuratiebestand dat zich in dezelfde map bevindt als het Dockerfile . Vergelijkbaar met het .gitignore bestand, bestaat het uit een lijst van bestandsnamen of patronen die de bestanden specificeren die niet meegenomen moeten worden tijdens het containerisatieproces bij het bouwen van een Docker image.

Hier is een voorbeeld:

/nl/images/contents-of-a-docker-ignorefile.jpg

Gebruik het principe van de minst geprivilegieerde gebruiker

Docker gebruikt standaard de root gebruiker om administratieve rechten uit te voeren voor zijn container operaties; echter, het vasthouden aan een dergelijke aanpak brengt een veiligheidsrisico met zich mee. In het geval van kwetsbaarheden in de containers kunnen onbevoegde indringers toegang krijgen tot de Docker host.

Om mogelijke inbreuken op de beveiliging te voorkomen, is het raadzaam om een aparte account aan te maken met specifieke privileges om toegang te krijgen tot afgeschermde gegevens. Door dit te doen, kunnen we ongeautoriseerde toegang tot vertrouwelijk materiaal beperken terwijl de integriteit van ons project behouden blijft. Als iemands gegevens in gevaar komen, hebben we bovendien de flexibiliteit om de toegang in te trekken zonder dat dit gevolgen heeft voor andere gebruikers of projecten.

Hier is een illustratie die het proces demonstreert van het aanmaken van een gebruikersaccount en het specificeren van zijn toegangsrechten:

/nl/images/creating-user-and-user-group-in-docker.jpg

Bepaalde fundamentele images hebben facsimile gebruikers ingebouwd, die het gebruik van vooraf geïnstalleerde gebruikersreferenties mogelijk maken in plaats van toegang via de root account met de bijbehorende privileges.

Waarom u de best practices van Docker zou moeten gebruiken

Het implementeren van best practices is een effectieve manier om zwakke plekken in de beveiliging te minimaliseren en meer gestroomlijnde, goed gestructureerde code in Docker te produceren. Een groot aantal best practices kan worden toegepast op elk aspect van de Docker-functionaliteit die in uw applicatie wordt gebruikt.

Een gestructureerd project vergemakkelijkt naadloze integratie met andere orkestratieplatformen, zoals Kubernetes. De opzet van het projectplan in dit artikel dient als startpunt voor je reis naar vaardigheid in Docker, met ruimte voor verdere uitbreiding en aanpassing als dat nodig is.