Docker tutorial - jente-nedergedaelt/IT-Landscape GitHub Wiki
1. Wat is Docker?
Docker wordt gebruikt om programma's of applicaties te verpakken, zodat je ze overal op dezelfde manier kunt runnen. Onze leerkracht vergeleek het een beetje met een soort doos waar je alles kan inzetten wat een app nodig heeft.
1.2 klein voorbeeld:
Stel je voor dat je zelf een app hebt gemaakt dat goed werkt op je eigen laptop, maar op een andere computer loopt alles fout door de verschillende instellingen en verschillende versies van de software die je hebt gebruikt. Docker lost dit probleem op door alles wat je app nodig heeft in 1 file (doos) te steken. Een soort "container", die op elk systeem en elke computer/lapotp werkt.
2. Waarom gebruiken we Docker?
- Geen gezeur van "bij mij werkt het wel": alles werkt op dezelfde manier, overal.
- Het is makkelijk om te testen: je kan snel iets uittesten of naar productie brengen.
- Je kan het makkelijk opnieuw opstarten: Containers starten snel op en kunnen makkelijk verwijdert worden.
3. Heel kort gezegd
Docker maakt je leven als developer gewoon een pak gemakkelijker.
4. Historische content en huidige toepassingen van Docker
4.2 Hoe is Docker ontstaan?
Vroeger werd er vaak gebruik gemaakt van Virtuele Machines (VM's) om apps in aparte omgevingen te runnen. Dat werkte wel, maar het was vaak zwaar om op te starten, traag en namen heel veel geheugen in beslag. Daarvoor had je dus heel krachtige servers nodig.
In 2013 werd Docker gelanceerd. Het werd geintroduceerd als een lichter alternatief. Het idee was om iets te maken dat wel een aparte omgeving bood, maar zonder al die extra opslag en zware virtuele machine. Zo kwamen ze met containers: een soort van mini omgeving dat niet veel middelen gebruikt en een kleine opslag nodig heeft.
4.3 Waar wordt Docker vandaag de dag voor gebruikt?
Docker wordt in de IT wereld vandaag de dag bijna overal gebruikt:
- Webontwikkeling: je kan je back-end, front-end en database elk apart runnen in een aparte container.
- Het testen: bij het testen van je app draait die in exact dezelfde omgeving als iedereen, dus je zal minder verrast worden door fouten.
- CI/CD: Docker heeft een grote rol bij automatische build en deploy cases.
- Cloud: Grotere apps worden opgesplitst in verschillende containers.
4.4 Fun fact
Zelf grote bedrijven als: Google, Spotify en Netflix maken allemaal gebruik van Docker.
5. Instalatie gids Macbook Sillicon
Stap 1. Ga naar de officiele Docker website
surf naar: https://www.docker.com/products/docker-desktop/
Klik op de knop "Download for mac - Apple Silicon"
Stap 2. Voer de installer uit
2.1 Dubbelklik op het bestand dat je net hebt gedownload. (Docker.dmg)
2.2 Sleep Docker in de Applicatie folder
Stap 3. Open Docker Desktop
Stap 4. Test of Docker werkt via Terminal
4.1 Open terminal en typ het commando: "docker --version"
4.2 als alles goed verlopen is zou men volgende moeten krijgen in de Terminal:
Klaar voor gebruik
Je kan nu beginnen aan het bouwen van containers!
6. Basis Commando's
1. docker --version
controleer of je docker correct hebt geinstalleerd of kijk of je up to date bent.
2. docker pull
download een image van docker (de app store van docker)
bv. docker pull drupal
Haalt de officiele drupal image op.
3. docker run "docker file id"
start je container
4. docker ps
docker ps
toont alle containers die draaien
(door -a toe te voegen zie je alle containers)
5. docker stop
docker stop "dockerfile naam of ID"
stopt de container
6. docker rm
docker rm "container naam"
verwijdert de container
7. docker images
toont alle images
8. docker rmi
docker rmi hello-world
verwijdert de hello-world image
9. docker built
docker built -t (naam) .
-t zorgt ervoor dat je het een naam kan geven (tag) . geeft het pad van de build
7. Dockerfile
Wat is een Dockerfile
Een Dockerfile is gewoon een tekstbestand waarin je stap voor stap schrijft hoe een Docker container moet worden opgebouwd. Je kan het een beetje vergelijken met een reccept voor je App: je zet erin welk besturingssysteem je nodig hebt, welke bestanden het moet kopieren, welke commando's het moet uitvoeren en welke container Docker moet opstarten.
7.1 Voorbeeldje van Dockerfile
- FROM node:18
- COPY . /app
- WORKDIR /app
- RUN npm install
- CMD ["npm", "start"]
uitleg:
- We gebruiken Node.js.
- We kopieren de code naar de container.
- We zetten de werkmap in /app.
- We installeren de packages.
- We starten de app.
8. Kort besluit
Een dockerfile legt eigenlijk vast hoe je container gebouwd moet worden, zodat je telkens eenzelfde omgeving hebt om je app in te runnen.
9. Docker Compose
9.1 Wat is een Docker Compose file en waarvoor wordt het gebruikt?
Docker Compose is een tool waarmee je meerdere containers tegelijk kunt starten/gebruiken en beheren, met 1 enkel bestand. In plaats van 1 voor 1 containers te moeten starten via de terminal, kan je met Docker Compose al de containers in 1 keer starten.
9.2 Waarom gerbuiken we Docker Compose?
Wanneer je een website zou maken met een fron-end, back-end en een database zou je 3 verschillende containers nodig hebben. Deze zou je allemaal handmatig moeten starten via de terminal, maar dit kan al snel lastig worden en kan ook zorgen voor fouten. Docker Compose neemt deze zorgen allemaal weg!
9.3 Hoe werkt Docker Compose?
Je maakt een DOcker Compose bestand aan. In dit bestand beschrijf je welke containers je wilt gebruiken, welke images deze nodig hebben, welke poorten je opent, enzovoort.
9.4 Voorbeeldje van een Docker Compose file
version: '3.8'
-
services:
-
backend: build: ./backend ports:
- "3000:3000"
-
depends_on:
- database
-
database: image: mongo ports:
- "27017:27017"
-
volumes:
- db-data:/data/db
uitleg:
- Services: hier worden de containers gedefinieert.
- Backend: de map ./backend bevat een Dockerfile. Deze wordt gebruikt door Docker Compose om de backend container te maken.
- Depends_on: zorgt ervoor dat de backend pas start wanneer de database klaar is.
- Database: we gebruiken de MongoDB image.
- Volumes: Hier bewaar je de data van MongoDB, zodat deze niet verloren gaat.
10. Kort besluit
Docker Compose is 1 bestand dat meerdere containers tegelijkertijd start. Het is handig voor projecten met een front-end, back-end, database. Het kan je heel wat tijd en fouten besparen en het is super populair voor development en testing.