Werken met Docker-images
Images zijn de basis van elke container. In deze sectie bekijken we hoe je Docker-images maakt, beheert en inspecteert met de meest gebruikte commando’s.
docker build
Het commando docker build is een van de meest gebruikte functies van Docker. Hoewel het onderdeel is van een breder ecosysteem voor geavanceerde use-cases, focussen we hier op het bouwen van een image vanuit een eenvoudige Dockerfile.
Een Dockerfile is een platte-tekstbestand (zonder extensie) met stapsgewijze instructies die Docker gebruikt om een image te bouwen. Zo maak je er één:
- Maak in de hoofdmap van je app een bestand met de naam
Dockerfilemet de volgende inhoud:
# syntax=docker/dockerfile:1
FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Deze Dockerfile begint met een lichtgewicht base image met Node.js en Yarn. Het kopieert de broncode van je app in het image, installeert de dependencies en definieert hoe de app moet starten.
- Bouw nu het image met het volgende commando:
docker build -t getting-started.
De flag -t laat je het image taggen. In dit geval hebben we het getting-started. genoemd. De . aan het eind vertelt Docker dat de Dockerfile in de huidige map staat.
docker images
Het commando docker images toont al je top-level images, hun repository, tags en grootte. Je kunt ook deze aliassen gebruiken:
docker image listdocker image ls
De syntax is: docker image ls [OPTIONS] [REPOSITORY[:TAG]]
Dit commando ondersteunt verschillende opties. Wil je bijvoorbeeld alle images zien, inclusief intermediate images, voeg dan de flag -a of --all toe: docker images -a.
docker rmi <image>
Het commando docker rmi <image> verwijdert een of meer images van je systeem. Als een image meerdere tags heeft, verwijdert dit commando met een specifieke tag alleen die tag. Maar is die tag de enige die aan het image gekoppeld is, dan worden zowel de tag als het image verwijderd.
Je kunt ook een van deze aliassen gebruiken:
docker image removedocker image rm
De syntax is: docker image rm [OPTIONS] IMAGE [IMAGE...]
Moet je een image verwijderen dat nog door een draaiende container wordt gebruikt, dan moet je forceren met de optie -f of --force.
Docker-containerbeheer
Vaak moeten we containers beheren—starten, stoppen, inspecteren of verwijderen—naarmate onze app evolueert. Daarom loop ik door de meest nuttige Docker-commando’s voor het beheren van containers in je dagelijkse workflow.
docker exec <container> <command>
Met het commando docker exec voer je een commando uit in een draaiende container zonder die te herstarten. Handig voor debuggen of om iets handmatig in de container te checken. Alias: docker container exec.
Het commando werkt alleen als het hoofdproces van de container (PID 1) draait. Het wordt niet automatisch opnieuw uitgevoerd als de container herstart.
De syntax is: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Er zijn verschillende optionele flags. Zo geeft --privileged het commando uitgebreide rechten binnen de container. Voor de volledige lijst met opties, bekijk de officiële docs.
Hier is een voorbeeld om een commando in de container uit te voeren:
docker exec -d mycontainer touch /tmp/execWorks
Het commando touch maakt een nieuw bestand /tmp/execWorks aan binnen de draaiende container mycontainer, op de achtergrond.
docker logs <container>
Met het commando docker logs bekijk je de logs van een specifieke container—alles wat op het moment van uitvoering naar standaarduitvoer en -fout is geschreven. Alias: docker container logs
De syntax is: docker container logs [OPTIONS] CONTAINER
Er zijn verschillende nuttige opties. Bijvoorbeeld:
--detailstoont extra attributen zoals omgevingsvariabelen en labels.--untillaat je logs ophalen tot een specifiek tijdstip.docker logs -f --until=2s testvolgt de loguitvoer voor de containertesten stopt na het tonen van de laatste twee seconden logs.
Hier zijn alle opties die we met docker logs kunnen gebruiken:

Opties voor docker log <container>. Bron: Docker-docs
docker rm <container>
Het commando docker rm <container> verwijdert een of meer containers van je systeem. Je kunt ook deze aliassen gebruiken:
docker container removedocker container rm
De syntax is: docker container rm [OPTIONS] CONTAINER [CONTAINER...]
Dit commando heeft enkele optionele flags die je kunt gebruiken. Hier zijn er een paar:

Opties voor docker rm <container>. Bron: Docker-docs
Je kunt bijvoorbeeld docker rm /redis gebruiken om de container te verwijderen die is geïdentificeerd door de link /redis. Let wel: dit commando verwijdert alleen draaiende containers.
Als je gestopte containers wilt verwijderen, gebruik dan docker container prune. Wil je je omgeving netjes houden, leer dan hoe je ongebruikte Docker-resources veilig verwijdert met deze Docker prune-tutorial.
docker restart <container>
Het commando docker restart <container> stopt en start vervolgens een of meer containers opnieuw. Alias: docker container restart.
De syntax is: docker restart [OPTIONS] CONTAINER [CONTAINER...]
Het restart-commando heeft enkele handige opties om container-restarts aan te passen. Hieronder staan beide opties met voorbeelden.
|
Optie |
Beschrijving |
Voorbeeld |
|
-s, --signal |
Signaal om naar de container te sturen. |
|
|
-t, --timeout |
Seconden om te wachten voordat de container wordt gekilled. |
|
> Wil je praktisch aan de slag? Bekijk deze Docker-projectideeën van beginner tot gevorderd niveau.
Docker-netwerking
Containernetwerken maken communicatie mogelijk tussen containers en externe workloads. Standaard is networking ingeschakeld en kunnen containers uitgaande verbindingen maken, maar ze weten niet automatisch op wat voor netwerk ze zitten of met welke workloads ze verbonden zijn.
Tenzij je de none-netwerkdriver gebruikt (die networking uitschakelt), kunnen containers met netwerkelementen zoals IP-adressen, gateways en DNS communiceren.
Laten we enkele veelgebruikte Docker-networking-commando’s bekijken.
docker network ls
Het commando docker network ls toont alle netwerken die bij de Docker Engine bekend zijn, ook over meerdere hosts in een cluster. Alias: docker network list.
- De syntax:
docker network ls [OPTIONS]
Je kunt meerdere opties gebruiken, zoals te zien is in de onderstaande afbeelding.
Standaard toont dit commando van elk netwerk:
- ID
- Naam
- Driver
- Scope
Met flags kun je de output aanpassen. Zo toont de flag --no-trunc volledige netwerk-ID’s in plaats van ingekorte. Zo gebruik je dit commando:
docker network ls --no-trunc
docker network create <network-name>
Het commando docker network create maakt een nieuw Docker-netwerk. Standaard gebruikt het de driver bridge, tenzij je een andere opgeeft met de flag --driver (of -d).
Docker ondersteunt ingebouwde netwerkdrivers zoals:
bridgevoor single-host-netwerken.overlayvoor multi-host-netwerken in Swarm-modus.
Je kunt ook externe of aangepaste drivers gebruiken indien nodig.
- De basis-syntax:
docker network create [OPTIONS] NETWORK
Het commando biedt veel opties voor uiteenlopende doeleinden. Bekijk de officiële documentatie om de volledige lijst met opties te zien.
Hier is een voorbeeld van het maken van een bridgenetwerk:
docker network create -d bridge my-bridge-network
Bridgenetwerken zijn beperkt tot één Docker Engine en verbinden dus geen containers over verschillende hosts.
Zodra Swarm-modus is ingeschakeld, kun je een netwerk maken dat meerdere Docker-hosts omvat:
docker network create --scope=swarm --attachable -d overlay my-multihost-network
> Benieuwd hoe Docker zich verhoudt tot Kubernetes? Deze uiteenzetting van Kubernetes vs Docker bespreekt de belangrijkste verschillen en use-cases.
Docker-volumes
Docker-volumes gebruik je om data op te slaan die moet blijven bestaan, zelfs wanneer een container stopt of wordt verwijderd. Je kunt ze expliciet aanmaken of Docker ze automatisch laten aanmaken bij het starten van een container.
Volumes worden op het hostsysteem opgeslagen maar zijn geïsoleerd van de kernbestanden van de host. Ze worden in containers gemount op een manier die lijkt op bind mounts, maar met betere portabiliteit en beveiliging.
Laten we enkele relevante docker volume-commando’s bekijken:
docker volume ls
Het commando docker volume ls toont alle volumes die bij Docker bekend zijn. Alias: docker volume list.
- De syntax is:
docker volume ls [OPTIONS]
Dit commando ondersteunt enkele optionele flags om de uitvoer te filteren of te formatteren—dit zijn ze:

Opties voor het docker volume ls-commando. Bron: Docker-docs
docker volume create <volume-name>
Het commando docker volume create maakt een nieuw volume voor het opslaan van persistente data. Als je geen naam opgeeft, genereert Docker er automatisch een.
Volumes aanmaken is een gebruikelijke stap wanneer je data langer wil laten bestaan dan de levensduur van een enkele container.
- De syntax:
docker volume create [OPTIONS] [VOLUME_NAME]
Laten we een voorbeeld bekijken van het aanmaken van een volume en dit vervolgens in een container gebruiken:
docker volume create hello
docker run -d -v hello:/world busybox ls /world
In dit voorbeeld wordt een volume hello gemaakt. Vervolgens wordt het in een container gemount op het pad /world. Zo kan de container naar dat volume schrijven of ervan lezen.
Meerdere containers kunnen hetzelfde volume gebruiken, wat handig is als de ene container data moet schrijven terwijl een andere die leest.
Let op: Volumenamen moeten uniek zijn per driver. Je kunt niet dezelfde volumenaam gebruiken in twee verschillende storage drivers.
Docker Compose-commando’s
Docker Compose maakt het eenvoudig om applicaties met meerdere containers te beheren met een eenvoudige YAML-file. Het ondersteunt verschillende omgevingen zoals development, testing, staging, productie en CI. Met één commando beheer je services, zet je netwerken op en beheer je volumes—allemaal op één plek.
Laten we een paar veelgebruikte compose-commando’s bekijken:
docker-compose up
Het commando docker compose up bouwt, (her)maakt, start en koppelt aan containers voor een service. Als de containers nog niet draaien, start het automatisch gelinkte services mee.
- De syntax:
docker compose up [OPTIONS] [SERVICE...]
Standaard combineert dit commando de output van alle containers. Wil je focussen op specifieke services, dan kun je:
- De flag
--attachgebruiken om aan bepaalde services te koppelen - De flag
--no-attachgebruiken om andere uit te sluiten
Bijvoorbeeld, docker compose up --no-attach <service-name> start alle services behalve die welke je van de logs hebt uitgesloten.
Als het commando klaar is, stoppen de containers ook. Om ze op de achtergrond te laten draaien, gebruik je de flag --detach:
docker compose up --detach
Zorg voordat je dit commando draait dat je bent genavigeerd (cd) naar de map waar je docker-compose.yml staat.
docker-compose down
Het commando docker compose down stopt containers en verwijdert containers, images, netwerken en volumes die door docker compose up zijn aangemaakt.
- De syntax is:
docker compose down [OPTIONS] [SERVICES]
Je kunt verschillende opties gebruiken, waaronder de volgende:

Opties voor het docker compose down-commando. Bron: Docker-docs.
Standaard verwijdert het commando het volgende:
- Containers voor services die in het Compose-bestand zijn gedefinieerd.
- Netwerken die zijn gedefinieerd in de networks-sectie van het Compose-bestand.
- Het standaardnetwerk, als dat wordt gebruikt.
Het volgende wordt niet standaard verwijderd:
- Netwerken en volumes die als extern zijn gedefinieerd.
- Anonieme volumes, oftewel volumes zonder naam.
Anonieme volumes worden niet automatisch gemount wanneer je docker compose up opnieuw draait, omdat ze geen naam hebben. Heb je persistente opslag nodig, gebruik dan liever named volumes of bind mounts.
Best practices voor het gebruik van Docker-commando’s
Docker is een krachtige manier om applicaties in containers te bouwen, te leveren en te draaien. Maar om het goed te gebruiken—en je setup efficiënt en schaalbaar te houden—moet je enkele best practices volgen.
Gebruik Docker-volumes voor persistente data
Standaard worden containerbestanden opgeslagen in een beschrijfbare laag die verloren gaat zodra de container wordt verwijderd! Deze laag is uniek voor elke container en niet gemakkelijk toegankelijk. Docker gebruikt verschillende soorten mounts om data te bewaren, waaronder volumes, beheerd door de Docker-daemon en opgeslagen op de host.
Met volumes kunnen we:
- Data behouden nadat een container is verwijderd.
- Performance-kritieke data opslaan met snelheid op hostniveau.
- Opslag eenvoudig beheren via Docker.
Ze zijn ideaal voor langetermijndata of wanneer meerdere containers toegang moeten delen. Houd er wel rekening mee dat bind mounts beter kunnen zijn als je bestanden rechtstreeks vanaf de host wilt benaderen, omdat volumes volledig door Docker worden beheerd.
Automatiseer met Docker Compose
Meerdere containers handmatig beheren kan al snel overweldigend worden. Docker Compose vereenvoudigt dit door alles in één YAML-bestand te definiëren, zodat jij je kunt focussen op bouwen.
Waarom dit een best practice is:
- Eén simpel commando: Start, stop, schaal of rebuild al je services in één keer.
- Consistentie voor iedereen: Of je nu ontwikkelt, test of in productie draait: Compose houdt omgevingen op één lijn, zodat je geen “op mijn machine werkt het”-issues hebt.
- Ingebouwde networking: Compose maakt een gedeeld netwerk zodat services eenvoudig communiceren met servicenamen in plaats van IP’s.
- Makkelijk schalen: Schaal services snel op of af met de flag
--scale—handig om te testen hoe je app met verschillende loads omgaat. - Heldere, collaboratieve config: Je volledige setup—containers, netwerken en volumes—is versiebeheerbaar en goed leesbaar.
Conclusie
Docker kan in het begin veel lijken, maar zodra je de kerncommando’s onder de knie hebt, gaan er veel mogelijkheden open. Van je eerste container draaien tot het beheren van netwerken, volumes en services: je bent nu beter toegerust om vol vertrouwen containerized apps te bouwen en te draaien.
En als je graag verder leert, zijn dit mooie volgende stappen:
- Containerization and Virtualization Concepts – een perfecte cursus om je conceptuele basis te leggen.
- Introduction to Docker – een cursus voor beginners om snel te starten.
- Intermediate Docker – een cursus voor wanneer je dieper wilt gaan.
- Containerization and Virtualization with Docker and Kubernetes – een skill track om uit te breiden naar Kubernetes en orkestratie in de praktijk.
FAQs
Wat zijn de meest gebruikte Docker-commando’s?
Enkele veelgebruikte Docker-commando’s zijn docker run, docker ps, docker build, docker pull en docker-compose up.
Hoe verschillen Docker-volumes van bind mounts?
Docker-volumes worden door Docker beheerd en zijn ideaal voor portabiliteit en datapersistentie, terwijl bind mounts verwijzen naar een specifiek bestandspad op de host.
Kan ik meerdere containers met één commando draaien?
Ja, met docker-compose up en een docker-compose.yml-bestand kun je meerdere services tegelijk draaien.
Wat is het verschil tussen docker start en docker run?
docker run maakt en start een nieuwe container, terwijl docker start een bestaande, gestopte container opnieuw start.
Hoe lijst ik alle gestopte containers op?
Gebruik docker ps -a om alle containers te zien, inclusief gestopte.
Wat is het doel van het commando docker exec?
Hiermee kun je commando’s uitvoeren binnen een draaiende container; vaak gebruikt voor debuggen of handmatige checks.
Is Docker alleen voor Linux-systemen?
Nee, Docker ondersteunt ook macOS en Windows, met lichte virtuele machines om containerization mogelijk te maken.
Wat doet het commando docker-compose down?
Het stopt en verwijdert containers, netwerken en volumes die door docker-compose up zijn aangemaakt.
Hoe verwijder ik dangling Docker-images?
Voer docker image prune uit om ongebruikte images op te schonen en schijfruimte vrij te maken.
Kan Docker in productieomgevingen worden gebruikt?
Zeker. Docker wordt veel gebruikt in productie om schaalbare, reproduceerbare applicaties te deployen in de cloud en on-prem.
Ik ben een contentstrateeg die graag complexe onderwerpen eenvoudig maakt. Ik heb bedrijven als Splunk, Hackernoon en Tiiny Host geholpen om boeiende en informatieve content te maken voor hun doelgroep.


Docker is uitgegroeid tot een onmisbare tool voor developers en dataprofessionals die applicaties willen bouwen, delen en consistent uitvoeren in verschillende omgevingen. Of je nu containers opzet voor lokale ontwikkeling of microservices naar productie brengt: het beheersen van Docker-commando’s is essentieel.
In deze gids neem ik je mee langs 18 essentiële Docker-commando’s—van images en containers tot networking, volumes en Compose—die je workflow versnellen en werken met Docker soepeler en efficiënter maken.
Wat is Docker?
Docker is een platform voor het ontwikkelen, leveren en draaien van applicaties. Het scheidt je app van de onderliggende infrastructuur, waardoor je sneller software kunt leveren en je setup op dezelfde manier kunt beheren als je applicaties.
Docker draait apps in geïsoleerde omgevingen met lichte pakketten, zogenaamde containers. Die bevatten alles wat een app nodig heeft, zoals dependencies en installaties, en helpen zo systeembronnen te besparen. We kunnen containers eenvoudig met teamgenoten delen, er meerdere tegelijk draaien en ze allemaal beheren met de tools en het platform van Docker.
We kunnen Docker voor van alles gebruiken, zoals:
Met Docker werken we met verschillende Docker-objecten, zoals images, containers, netwerken, plugins en volumes. Dit zijn de bouwstenen van je Docker-setup. Onder de motorkap gebruikt Docker functies van de Linux-kernel om dit allemaal te laten werken. We bedienen het met eenvoudige terminalcommando’s, en elk Docker-commando begint met
docker.> Als je net begint, biedt de Introduction to Docker-cursus een praktische basis voor de beginselen van containerization.
Basis Docker-commando’s
Nu we hebben behandeld wat Docker is en hoe het werkt, bekijken we enkele van de meest gebruikte commando’s. Hiermee bouw je containers, voer je ze uit en beheer je ze in je dagelijkse workflow.
docker --version en docker info
In Docker-commando’s heet alles wat begint met
--een flag.Zo toont de flag
--versionde versie van de Docker CLI die je gebruikt. Je kunt ookdocker version(zonder de flag) gebruiken voor gedetailleerde versie-informatie van alle Docker-componenten.De uitvoer is verdeeld in twee delen:
Je kunt deze uitvoer ook formatteren met de flag
--formaten een eigen template.Het commando
docker infogeeft je een volledig overzicht van je Docker-setup. Het is hetzelfde alsdocker system info, maar dan korter. Je ziet details zoals je kernelversie, het aantal containers en images, en andere systeemwijde informatie.Afhankelijk van je storage driver zie je ook info zoals poolnamen en databestanden. Net als bij
docker versionkun je de uitvoer formatteren met--formatof-f.docker pull <image>
Het pull-commando downloadt een Docker-image uit een registry, meestal Docker Hub—een openbare bibliotheek met kant-en-klare images die je kunt gebruiken zonder zelf iets te hoeven opzetten. Je kunt het uitvoeren als
docker pull <image>of gewoondocker pull; beide doen hetzelfde.docker image pull [OPTIONS] NAME[:TAG|@DIGEST]Als je geen tag opgeeft, gebruikt Docker standaard
:latest. Bijvoorbeeld:docker image pull debianhaalt het imagedebian:latestop.Je kunt ook opties toevoegen na het commando om te bepalen hoe het image wordt opgehaald, zoals bandbreedte beperken of verificatie overslaan. De afbeelding hieronder toont alle beschikbare opties en hun functies.
Opties voor het docker pull-commando. Bron: Docker-docs
docker run <image>
Het commando
docker run <image>maakt en start een nieuwe container op basis van een opgegeven image—het voert het image dus uit in een verse container. Het is een afkorting vandocker container run; beide werken hetzelfde.docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]Als je een container al eens hebt gedraaid en je wil ’m opnieuw starten met alle eerdere wijzigingen, gebruik dan:
docker start <container>.Het run-commando heeft veel opties om te bepalen hoe je container draait. We lopen een paar veelvoorkomende door met voorbeelden:
Flag
Voorbeeldcommando
Beschrijving
-- namedocker run --name test -d nginx:alpineDe opgegeven aangepaste identificatie voor de container met de naam test met het
nginx:alpine-image.-w,--workdirdocker run -w /path/to/dir/ -i -t ubuntu pwdVoert het commando uit binnen de opgegeven directory, in dit voorbeeld
/path/to/dir/--piddocker run --rm -it --pid=host alpineStandaard hebben alle containers de PID-namespace ingeschakeld, wat zorgt voor scheiding van processen.
Het voorbeeld draait een alpine-container met de optie
--pid = host.--cidfiledocker run --cidfile /tmp/docker_test.cid ubuntu echo "test"Dit maakt een container en print een test naar de console
Met de
cidfile-flag probeert Docker een nieuw bestand te maken en het container-ID erin te schrijven.docker stop <container> en docker start <container>:
Het commando
docker start <container>start een of meer gestopte containers. Indocker start my_containerismy_containerde naam van de container die we willen starten. We kunnen ook de alias gebruiken:docker container start.docker container start [OPTIONS] CONTAINER [CONTAINER...]Op dezelfde manier stopt
docker stopeen of meer draaiende containers. Indocker stop my_containerismy_containerde naam van een draaiende container.Dit commando heeft ook een alias:
docker container stop.docker container stop [OPTIONS] CONTAINER [CONTAINER...]Net als
startheeft hetstop-commando opties om te bepalen hoe containers worden gestopt. Hierna lichten we enkele nuttige uit:Opties voor
docker stop. Bron: Docker-docs