Ga naar hoofdinhoud

Top 18 Docker-commando’s om containers te bouwen, uitvoeren en beheren

Deze gids behandelt essentiële Docker-commando’s—van containerbasics tot volumes en networking—zodat je met vertrouwen applicaties in verschillende omgevingen kunt beheren!
Laiba Siddiqui
Laiba Siddiqui

Maak je gratis account aan

Oefen en volg je voortgang.

Ga verder met GoogleDoor verder te gaan, accepteer je ons Gebruiksvoorwaarden, onze Privacybeleid en dat je gegevens in de VS worden opgeslagen.

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:

  • Flexibele deployment en schaling.
  • Meer workloads draaien op dezelfde hardware.
  • Snelle, consistente levering van applicaties.

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 --version de versie van de Docker CLI die je gebruikt. Je kunt ook docker version (zonder de flag) gebruiken voor gedetailleerde versie-informatie van alle Docker-componenten. 

De uitvoer is verdeeld in twee delen:

  • Client toont info over de Docker CLI en bijbehorende tools.
  • Server toont details over de Docker Engine en waarop deze draait.

Je kunt deze uitvoer ook formatteren met de flag --format en een eigen template.

Het commando docker info geeft je een volledig overzicht van je Docker-setup. Het is hetzelfde als docker 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 version kun je de uitvoer formatteren met --format of -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 gewoon docker pull; beide doen hetzelfde.

  • De volledige syntax ziet er zo uit: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

Als je geen tag opgeeft, gebruikt Docker standaard :latest. Bijvoorbeeld: docker image pull debian haalt het image debian:latest op.

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

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 van docker container run; beide werken hetzelfde.

  • De basis-syntax: 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

-- name

docker run --name test -d nginx:alpine

De opgegeven aangepaste identificatie voor de container met de naam test met het nginx:alpine-image.

-w,--workdir

docker run -w /path/to/dir/ -i -t ubuntu pwd

Voert het commando uit binnen de opgegeven directory, in dit voorbeeld /path/to/dir/

--pid

docker run --rm -it --pid=host alpine

Standaard hebben alle containers de PID-namespace ingeschakeld, wat zorgt voor scheiding van processen.

Het voorbeeld draait een alpine-container met de optie --pid = host.

--cidfile

docker 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. In docker start my_container is my_container de naam van de container die we willen starten. We kunnen ook de alias gebruiken: docker container start.

  • De volledige syntax: docker container start [OPTIONS] CONTAINER [CONTAINER...]

Op dezelfde manier stopt docker stop een of meer draaiende containers. In docker stop my_container is my_container de naam van een draaiende container.

Dit commando heeft ook een alias: docker container stop. 

  • De volledige syntax ziet er zo uit: docker container stop [OPTIONS] CONTAINER [CONTAINER...]

Net als start heeft het stop-commando opties om te bepalen hoe containers worden gestopt. Hierna lichten we enkele nuttige uit:

Opties voor het docker stop-commando

Opties voor docker stop. Bron: Docker-docs

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:

  1. Maak in de hoofdmap van je app een bestand met de naam Dockerfile met 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.

  1. 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 list
  • docker 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 remove
  • docker 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:

  • --details toont extra attributen zoals omgevingsvariabelen en labels.
  • --until laat je logs ophalen tot een specifiek tijdstip.
  • docker logs -f --until=2s test volgt de loguitvoer voor de container test en 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>

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 remove
  • docker 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>

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.

docker restart -s SIGTERM mycontainer

-t, --timeout

Seconden om te wachten voordat de container wordt gekilled.

docker restart -t 10 mycontainer

> 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:

  • bridge voor single-host-netwerken.
  • overlay voor 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.

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 --attach gebruiken om aan bepaalde services te koppelen
  • De flag --no-attach gebruiken 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.

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:

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.

Laiba Siddiqui

Auteur

Laiba Siddiqui

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.

Onderwerpen

Gerelateerd