Docker containers
Projectdoelen:
-
De student kan 3 voordelen opnoemen, die docker containers bieden boven een normale installatie van pakketten
-
Voordeel 1: Isolatie: Minder systeemvervuiling
-
Voordeel 2: Voorspelbaarheid: Gedrag van applicatie verandert niet op ander operating systems.
-
Voordeel 3: Inzetbaarheid: docker containers kunnen makkelijk kant en klaar gedistribueerd worden
-
De student kan een image forken van de docker hub
-
De student kan een eigen image pushen naar de docker hub
-
De student kan een eenvoudige docker image bouwen met yaml
Les 1 Account/Linux VM
-
Account maken op docker hub. Met deze account kun je docker containers downloaden en uitproberen. Ook kun je je eigen images 'uploaden'.
-
Debian virtuele machine maken van minimaal 40 Gb en 2048 Mb RAM.

Je gaat docker installeren in je Debian VM.
Docker installatieproces
Stap | Commando |
---|---|
Update de apt pakketindex en installeer pakketten zodat apt een repository over HTTPS kan gebruiken |
|
De officiele Docker GPG key toevoegen aan je systeem |
|
Maak een directory aan voor de keyring van Debian |
|
Haal nu de gpg sleutel op, waarmee je de integriteit van dit pakket gecontroleerd wordt |
|
Je Debian repository aanpassen |
|
Opnieuw updaten |
|
Bij een GPG fout dit commando uitvoeren |
|
En weer opnieuw proberen up te daten |
|
Installeer de laatste versie van Docker Engine, containerd, and Docker Compose |
|
Je eerste programma klonen |
|
Les 2 Docker image downloaden en testen
In deze les leer je hoe je van docker hub een image kunt downloaden.
Dit doe je met het commando docker pull <xxx>
We gaan een docker image ophalen met de naam Mediawiki
-
Stap 1: log in op docker hub met je account.
-
Stap 2: Typ in het zoekvenster "mediawiki"
-
Stap 3: Kopieer het commando rechtsboven, wat begint met docker pull en plak het in de terminal van je VM. Vergeet niet om het als root user uit te voeren (sudo)
-
Stap 4: Wanneer de 'pull' klaar is. kun je de container starten met
sudo docker run --name some-mediawiki -p 8080:80 -d mediawiki
-
Stap 5: Open de browser in je VM en typ in de adresbalk localhost:8080. Je ziet dat poort 80 in de docker container met poort 8080 op je host machine 'praat'

-
Klik op Complete the installation
-
Kies je favoriete taal in de language setup
-
Scroll naar beneden en kijk of je de regel The environment has been checked. You can install MediaWiki. ziet staan. Zo ja, ga dan door met de installatie
-
Klik helemaal onderin op Continue
-
Kies op de volgende pagina _Database type: SQLite
-
Geef een naam aan je Wiki. Bijvoorbeeld: open source of Mijn kennisbank
-
Laat de keuze op Same as the wiki name staan
-
Maak nu een administrator account aan. Je kunt je eigen mailadres gebruiken.
-
Laat het subscribe en het Share data… keuzevakje leeg
-
Kies daarna I’m bored already, just install the wiki.
-
Klik dan nog een keer op continue
-
Er wordt een bestand met de naam LocalSettings.php automatisch gedownload naar je Downloads directory
-
Kopieer dit bestand vanuit de Downloads directory naar je container…
-
Je moet daarvoor eerst de naam van je container weten. Dat kun je uitvinden met
sudo docker ps -a
-
Je ziet dat voor de naam wikimedia een hash staat. Bijvoorbeeld: 0b1b6ae74f71
-
Voer nu het commando
sudo docker cp LocalSettings.php 0b1b6ae74f71:/var/www/html/
uit -
Ga weer terug naar je browser en log opnieuw in
-
Maak een nieuwe wikipagina aan door achter de url in de adresbalk newpage te typen
-
Klik daarna op de link create this page
-
Kopieer daarna wat tekst uit een Wikipedia pagina in het tekstvak en sla de pagina op
Inleveren
Maak nu een screenshot van je nieuwe wikiartikel en upload het naar de ELO.

-
Sluit de browser
-
Stop de container met het commando
docker stop 0b1b6ae74f71
. Op de plaats van de hash -0b1b6ae74f71- vul je natuurlijk de hash in van jouw container! -
Voor de volgende les voer je alvast dit commando uit:
docker pull busybox
Les 3 Docker images beheren
Je hebt nu al mooi wat ervaring met docker opgedaan! Tijd om het beheer van je docker images aan te pakken.
-
Met het commando
sudo docker ps -a
krijg je een overzicht in beeld van alle gemaakte containers -
Wanneer je
sudo docker ps -a | grep Up
intikt, krijg je een overzicht in beeld van alle actieve containers -
Wanneer je
sudo docker ps -a | grep Exited
intikt, krijg je een overzicht in beeld van alle inactieve containers -
Met
sudo docker images
krijg je alle gedownloade images in beeld -
Het commando
sudo docker restart 0b1b6ae74f71
herstart je je container. Dat kan handig zijn wanneer er veel is gewijzigd in de container. -
De container kun je inactief maken met
sudo docker stop 0b1b6ae74f71
. -
Wanneer je de container helemaal wilt verwijderen doe je dat met
sudo docker rm 0b1b6ae74f71
-
Het commando
sudo docker run -it ubuntu bash
haalt de docker image van ubuntu op. Vervolgens kom je in de bash shell van de container terecht. Met de toetsencombi CTRL+D verlaat je de shell weer. Dat kun je ook doe door exit in te tikken.
Inleveren
Voer het commando `sudo docker run -it ubuntu bash` uit. Wanneer je 'binnen' bent, ga je de image updaten met `sudo apt update && sudo apt upgrade` Maak vervolgens een screenshot zoals je hieronder ziet. Lever dit in op de ELO.

Les 4 Docker images aanpassen
Om te demonstreren dat een container na een herstart weer in de originele staat terugkeert kun je het volgende proberen:
Start je ubuntu container met sudo docker run -it ubuntu bash
Voer rm -rf /usr/bin
in de container uit.
Zorg ervoor dat je dit commando uitvoert in de container en niet op je laptop/desktop! |
Hierdoor zullen andere commando’s zoals ls -l en bv. uptime niet werken.
Zodra zulke commando’s niet meer werken, kun je de container afsluiten (type exit en druk op Enter) en hem dan opnieuw opstarten met het commando sudo docker run -it ubuntu bash
.
Aangezien Docker elke keer een nieuwe container aanmaakt, zou alles weer moeten gaan werken.
Controleer dat.
-
Voer het commando
sudo docker run -p 8000:80 kezepema/dvwa-easyhack
uit. -
Voer nu
sudo docker images
uit. Je krijgt ongeveer zo’n overzicht in beeld:

-
We gaan de naam van deze image aanpassen.
-
Dat doe je met
sudo docker image tag 3e9a8a15cf64 easyhack
-
Op de plaats van 3e9a8a15cf64 voer je natuurlijk je eigen image_id in!
-
Nu gaan we de oude image weghalen. Dat gaat zo:
sudo docker rmi -f kezepema/easyhack
-
Kijk nu weer naar het overzicht van de images. Is de image kezepema/easyhack verdwenen?
-
Start je container:
sudo docker run -p 8000:80 easyhack
-
Open de browser in je VM en voer in de adres balk in: localhost:8000/website_2 (Probeer het geheime document te vinden!)
-
Probeer ook de raadsels op te lossen van localhost:8000/website_3, localhost:8000/website_4, localhost:8000/website_5 en localhost:8000/website_6
Inleveren
Zorg dat je vanuit website_6 de geheime zin kraakt. Noteer de oplossing in Kladblok en lever dit in op de ELO.
Les 5 Een eigen docker image bouwen
-
Maak een directory aan in je Debian VM met de naam mijn_docker
-
Maak in die directory een bestand aan met de naam Dockerfile
-
Kopieer en plak de onderstaande tekst in het bestand:
FROM ubuntu RUN apt update RUN apt install nginx -y COPY index.html /var/www/html/ EXPOSE 80 CMD ["nginx","-g","daemon off;"]
Wat staat hier nou eigenlijk?
Commando | Uitleg |
---|---|
FROM ubuntu |
Haal een ubuntu container op |
RUN apt update |
Wanneer de ubuntu image gedownload is, moet het systeem ge-update worden. |
RUN apt install nginx -y |
Na de update van het systeem, moet nginx geinstalleerd worden. Nginx is een webserver pakket, net zoiets als Apache2 |
COPY index.html /var/www/html/ |
Kopieer uit de directory waar je nu inzet, het bestand index.htm naar de nieuwe container in de locatie /var/www/html |
EXPOSE 80 |
Zet de http poort 80 open in de container |
CMD ["nginx","-g","daemon off;"] |
Start de webserver nginx |
Op het einde van de bouw van de container zie je ongeveer deze informatie:

-
Maak een index.html bestand aan met je eigen naam op de plaats van <Voornaam> en <Achternaam> als inhoud:
-
echo '<html><body>Hoi mijn naam is:<h1> Voornaam Achternaam</h1></body></html>' > index.html
-
Gebruik het commando
sudo docker build -t mijneerstecontainer .
(vergeet de punt aan het einde van het commando niet. Hiermee wordt bedoeld: bouw de container in deze directory) -
Start je container met het commando
sudo docker run -d -p 5000:80 mijneerstecontainer:latest
. De-d
betekent draai de code in 'detached' mode, op de achtergrond dus. De-p
betekent zet poort 80 in de container op en laat deze praten met poort 5000 in de host. -
Open nu je browser. Typ in de adresbalk
localhost:5000
-
Wanneer het goed is, zie je de website die je net hebt gemaakt.
Inleveren
Maak een screenshot van je eigen webpagina. Upload je screenshot en lever dit in op de ELO.
Les 6 Je Dockerfile uitbreiden
In de vorige les heb je al wat basiscommando’s uitgeprobeerd in je Dockerfile. Je Dockerfile bevat in feite alle informatie om een container te bouwen.
FROM maakt een laag vanaf een bepaalde Docker image. COPY voegt bestanden vanuit de hostdirectory naar de container. RUN voert een programma in de container uit. CMD voert een commando uit in de container.
We gaan een stylesheet aan je Dockerfile toevoegen. dan ziet je webpagina er wat meer 'fancy' uit.
-
Maak eerst een stylesheet aan in de directory waar zich ook je Dockerfile bevindt.
-
Typ:
nano mijnstijl.css
-
Plak de onderstaande inhoud in het bestand:
<style> * { box-sizing: border-box; } body { margin: 0; font-family: Arial, Helvetica, sans-serif; } /* Style the side navigation */ .sidenav { height: 100%; width: 200px; position: fixed; z-index: 1; top: 0; left: 0; background-color: #111; overflow-x: hidden; } /* Side navigation links */ .sidenav a { color: white; padding: 16px; text-decoration: none; display: block; } /* Change color on hover */ .sidenav a:hover { background-color: #ddd; color: black; } /* Style the content */ .content { margin-left: 200px; padding-left: 20px; } </style>
-
Sla het bestand op met CTRL+O en daarna CTRL+X
-
Pas nu je index.html bestand aan. Die heb je al eerder gemaakt in Les 5.
-
Voeg onder de <html> tag een <head> tag in.
-
Voeg de volgende regel toe na <head>:
<link rel="stylesheet" href="mijnstijl.css">
-
Plaats onder deze regel de close tag </head>

-
Sla het bestand op.
-
Nu moet je je Dockerfile bijwerken.
Inleveren
Stuur je bijgewerkte Dockerfile in op de ELO
Les 7 Je Dockercontainer 'pushen'
Je hebt een account aangemaakt op Github. In deze les leer je hoe je je eigen image kunt pushen naar de docker hub.
In de vorige les heb je geleerd hoe je zelf een Dockerfile kunt aanpassen en uitbreiden.
Wanneer je deze image wilt uploaden naar je account op de docker hub gebruik je het volgende commando:
docker push <je accountnaam>/<jouw containernaam>:<de naam waarmee je de container start>
Voorbeeld:

Kijk naar de eerste container bovenin de lijst.
De image naam is easyhack. De tag naam is latest. In dit geval is er geen tagname ingegeven. Automatisch wordt dan 'latest' toegevoegd. Mijn gebruikersnaam is kezepema.
In dit geval zou het dus zo worden:
docker push kezepema/easyhack:latest