Ga naar hoofdinhoud

Wat blijft er over?

Een image, een container en een volume lijken op elkaar: alle drie "zitten er dingen in". Ze gaan alleen heel anders weg. Jullie leggen ze als vakken op tafel, met kaartjes erin, en spelen na wat Docker doet bij vijf commando's.

Wat je nodig hebt​

  • Per tweetal: het knipblad (de laatste pagina), een schaar, drie vellen papier als vakken en een pen.
  • Ongeveer 20 minuten.

De tafel​

Schrijf op de drie vellen: Image, Container en Volume. Knip de kaartjes uit, en leg ze in het vak waar ze horen:

VakKaartjes
ImageA, B, C
ContainerD, E
VolumeF

Kaartje G hoort bij geen enkel vak: het staat op de server zelf, naast Docker. Leg het naast de vellen.

Een kaartje dat weggaat, leg je omgekeerd opzij. Een kaartje dat opnieuw gemaakt wordt, draai je om en schrijf je er "nieuw" op. Begin elke ronde met de tafel zoals hij na de vorige ronde is.

De rondes​

  1. docker compose stop, en daarna docker compose start.
  2. Je verandert een tekst in main.py op je laptop, pusht, en typt op de server git pull en docker compose up -d --build.
  3. docker image prune.
  4. docker compose down, en daarna docker compose up -d.
  5. docker compose down -v, en daarna docker compose up -d.

Gok eerst, voor ronde 2: staat het bericht van gisteren er nog? ______

Gok eerst, voor ronde 5: en nu? ______

RondeWegNieuwBlijft
1
2
3
4
5

Bespreek na​

  1. Kaartje E stond in de container, niet in het volume. Na welke ronde was het voor het eerst weg? Wat zegt dat over een bestand dat je site buiten data/ schrijft?
  2. Bij ronde 2 ging de container weg, en toch stond het bericht er nog. Hoe kan dat?
  3. Welke ronde typ je nooit op een server? En welke kaartjes zou je dan alleen nog uit een back-up kunnen halen?
  4. Kaartje G ging nooit weg. Waarom hoort het toch in je back-up?
Antwoorden
RondeWegNieuwBlijft
1nietsnietsalles: de container stopt en start, maar blijft bestaan, met E erin
2D, EC, DA, B, F, G; het oude image blijft ook, zonder naam
3het oude image, zonder naamnietsalles wat op tafel ligt
4DDA, B, C, F, G
5D, FD, en een leeg volumeA, B, C, G

In ronde 2 bouwt Docker een nieuw image. A en B haalt hij uit zijn geheugen (CACHED), want requirements.txt veranderde niet; C is nieuw. Omdat het image anders is, gooit up de oude container weg en maakt hij een nieuwe, en die koppelt hetzelfde volume. Zonder verandering in je code was het image gelijk gebleven, en de container ook.

Zo kun je het zelf nagaan, op je laptop:

docker compose exec gastenboek touch /tmp/kladje
docker compose stop
docker compose start
docker compose exec gastenboek ls /tmp/kladje
docker compose up -d --force-recreate
docker compose exec gastenboek ls /tmp/kladje

--force-recreate maakt een nieuwe container, ook als het image gelijk is. De eerste ls vindt het kladje, de tweede zegt No such file or directory: een nieuwe container begint met wat er in het image staat.

Bespreek na. Vraag 1: na ronde 2. Wat je site buiten data/ schrijft, is weg bij elke nieuwe versie. Daarom staat elke database in data/, en data/ in het volume. Vraag 2: het bericht stond in F, en het volume hoort niet bij één container: de nieuwe koppelt hetzelfde volume. Vraag 3: ronde 5, down -v. Dan is F weg, en die staat alleen in je back-up. Vraag 4: G staat alleen op deze server. Is de server weg, dan is G ook weg, en dan heb je je domeinnaam en de voordeur niet meer.

Knipblad​

Kaartjes
A python:3.13-slim: Linux en Python
B de packages uit requirements.txt
C je code: main.py, templates, static
D de container gastenboek-gastenboek-1
E een bestand dat je site in /tmp schreef
F gebruikers.db en je andere databases in /app/data
G .env en de map ~/traefik op de server