Docker: Een Refresher & Uitgebreide Gids

🖋️ bert

# Docker: Een Refresher & Uitgebreide Gids

Deze tutorial is bedoeld voor professionals die al enige programmeer- of systeembeheerkennis hebben, maar een refresher en meer in de diepte uitleg over Docker willen. We focussen op concepten, best practices en geavanceerdere aspecten, naast de basisprincipes. Beschouw het als een uitgebreide geheugensteun en referentie.

Inhoud:

  1. Wat is Docker & Waarom Gebruiken? (De Fundamentele Basis)
  2. Docker Architectuur: Containers vs. Virtual Machines
  3. Docker Images: De Blauwdrukken
  4. Dockerfile: Het Script voor Jouw Image
  5. Docker Hub en Registries: Distributie & Delen
  6. Docker Compose: Meerdere Containers Samenwerken
  7. Docker Networking: Communicatie Tussen Containers
  8. Volume Management: Persistentie van Data
  9. Geavanceerde Concepten:
    • Multi-Stage Builds
    • Health Checks
    • Resource Limiting (CPU, Memory)
    • Docker Swarm/Kubernetes (Introductie)
  10. Best Practices & Veiligheid
  11. Troubleshooting Tips
  12. Nuttige Commando's (Cheat Sheet)

1. Wat is Docker & Waarom Gebruiken?

Docker is een platform voor het bouwen, verpakken en draaien van applicaties in containers. Containers zijn gestandaardiseerde units software die alles bevatten wat nodig is om te draaien: code, runtime, systeemtools, libraries, instellingen. Ze isoleren de applicatie van de onderliggende infrastructuur.

Waarom Docker?

  • Consistentie: "Werkt op mijn machine" problemen verdwijnen omdat de omgeving altijd hetzelfde is.
  • Portabiliteit: Eenvoudig te verplaatsen tussen development, testing en productie.
  • Isolatie: Containers isoleren applicaties van elkaar en het host systeem, verbetering de veiligheid.
  • Efficiëntie: Lichter dan virtuele machines (zie verder) en sneller op te starten.
  • Schaalbaarheid: Gemakkelijk om containers te schalen met tools zoals Docker Swarm of Kubernetes.

2. Docker Architectuur: Containers vs. Virtual Machines

Feature Virtual Machine (VM) Container
Hypervisor Ja (Virtualiseert hardware) Nee (Maakt gebruik van de host OS kernel)
Operating System Volledige OS per VM Deelt de host OS kernel
Grootte Groot (GB's) Klein (MB's)
Opstarttijd Lang (minuten) Snel (seconden)
Overhead Hoog (door OS overhead) Laag
Isolatie Sterk (hardware-level isolatie) Goede Isolatie (OS-level isolatie, maar afhankelijk van kernel)

Containers zijn niet hetzelfde als VM's. Ze delen de host operating system kernel en zijn daardoor efficiënter in resourcegebruik.

3. Docker Images: De Blauwdrukken

Docker images zijn read-only templates die worden gebruikt om containers te creëren. Ze bevatten alles wat nodig is om een applicatie uit te voeren, inclusief de code, runtime, libraries en instellingen.

  • Image Layers: Images bestaan uit layers, elk layer representeert een verandering in het image. Dit maakt images efficiënt omdat layers worden hergebruikt.
  • Base Images: Je begint vaak met een base image (bijv., ubuntu:latest, node:16) en bouwt daarop verder.

4. Dockerfile: Het Script voor Jouw Image

Een Dockerfile is een tekstbestand dat de instructies bevat om een Docker image te bouwen. Elke regel in een Dockerfile representeert een layer in het image.

Belangrijke Dockerfile Instructies:

  • FROM: Specificeert het base image.
  • RUN: Voert commando's uit tijdens de build-fase (bijv., installeren van pakketten).
  • COPY: Kopieert bestanden en directories naar de container.
  • ADD: Vergelijkbaar met COPY, maar kan ook URL’s downloaden en automatisch extracties uitvoeren (gebruik COPY tenzij je deze extra features nodig hebt).
  • WORKDIR: Stelt de werkdirectory in voor volgende instructies.
  • ENV: Stelt omgevingsvariabelen in.
  • EXPOSE: Documenteert welke poorten de container blootlegt (niet verplicht om te publiceren).
  • CMD: Specificeert het commando dat wordt uitgevoerd wanneer de container start. Meestal één commando, maar kan ook een script zijn.
  • ENTRYPOINT: Configureert een container zodat hij als uitvoerbaar bestand fungeert. Vaak gebruikt in combinatie met CMD.

Voorbeeld Dockerfile (Node.js applicatie):

FROM node:16-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

5. Docker Hub en Registries: Distributie & Delen

Docker Hub is een openbare registry waar je Docker images kunt vinden en delen. Je kan ook private registries opzetten voor interne teams of organisaties.

  • docker pull <image_name>: Downloadt een image van een registry.
  • docker push <image_name>: Uploadt een image naar een registry (vereist login).

6. Docker Compose: Meerdere Containers Samenwerken

Docker Compose definieert en draait multi-container Docker applicaties. Het gebruikt een docker-compose.yml bestand om de services, netwerken en volumes te configureren die nodig zijn voor de applicatie.

Voorbeeld docker-compose.yml:

version: "3.9"
services:
  web:
    build: . # Bouwt een image vanuit de Dockerfile in de root directory
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword

docker-compose up: Start de applicatie gedefinieerd in het docker-compose.yml bestand.

7. Docker Networking: Communicatie Tussen Containers

Docker creëert standaard een netwerk dat containers met elkaar verbindt. Je kan ook aangepaste netwerken maken voor meer controle en isolatie.

  • Bridge Network: Standaard netwerk, gebruikt NAT om containers te laten communiceren met de buitenwereld.
  • Host Network: De container deelt het netwerk van de host machine (geen aanbevolen vanwege security risico's).
  • Overlay Network: Voor multi-host Docker Swarm deployments.

8. Volume Management: Persistentie van Data

Volumes zijn gebruikt om data persistent te maken buiten de container lifecycle. Dit is belangrijk voor databases, logs en andere bestanden die je niet wilt verliezen als de container wordt verwijderd.

  • docker volume create <volume_name>: Maakt een Docker volume aan.
  • -v <volume_name>:<container_path>: Mount een volume in een container.

9. Geavanceerde Concepten:

  • Multi-Stage Builds: Gebruik meerdere FROM statements in je Dockerfile om kleinere en veiligere images te creëren. Je kan build tools en dependencies gebruiken in een "builder" image, maar die niet in de uiteindelijke runtime image opnemen.
  • Health Checks: Definieer health checks in je Dockerfile om te bepalen of een container gezond is. Docker kan containers automatisch herstarten als ze falen.
  • Resource Limiting (CPU, Memory): Beperk de CPU en memory resources die een container mag gebruiken met docker run --cpus en --memory.
  • Docker Swarm/Kubernetes: Orchestratietools voor het beheren van groepen containers over meerdere hosts.

10. Best Practices & Veiligheid:

  • Gebruik .dockerignore om onnodige bestanden uit te sluiten bij het bouwen van images.
  • Scan Docker images op kwetsbaarheden met tools zoals Clair of Trivy.
  • Beperk de privileges die containers hebben. Run ze als een non-root user.
  • Gebruik secure base images en update regelmatig.

11. Troubleshooting Tips:

  • docker logs <container_id>: Bekijk de logs van een container.
  • docker exec -it <container_id> bash: Open een shell in een draaiende container.
  • Controleer Docker events met docker events.

12. Nuttige Commando's (Cheat Sheet):

Command Description
docker build -t <image_name> . Bouwt een image vanuit een Dockerfile.
docker run <image_name> Start een container gebaseerd op een image.
docker ps Lijst actieve containers.
docker ps -a Lijst alle containers (actief en gestopt).
docker stop <container_id> Stopt een container.
docker rm <container_id> Verwijdert een container.
docker images Lijst lokale Docker images.
docker rmi <image_name> Verwijdert een image.
docker inspect <container_id/image_name> Geeft gedetailleerde informatie over een container of image.

Deze tutorial biedt een uitgebreide refresher en diepere duik in Docker. Blijf experimenteren, lees de officiële documentatie en pas deze concepten toe op je eigen projecten om je Docker vaardigheden verder te ontwikkelen. Succes!

Reacties (0 )

Geen reacties beschikbaar.