Virtuele LAMP-omgeving in Docker

Docker is een virtualisatieplatform dat toelaat om virtuele containers te draaien op een gemeenschappelijke OS-kernel. Docker heeft als voordeel tegenover andere virtualisatieplatformen dat het razendsnel is en dat de virtuele omgevingen relatief weinig schijfruimte innemen. Dankzij Docker kunnen web developers een ontwikkelomgeving creëren die nauw aansluit bij de productie-omgeving en deze met elkaar delen a.d.h.v. enkele tekstbestanden.


Deze HOWTO geeft aan hoe een LAMP-container (Linux Apache MySQL PHP) kan worden gestart met Docker. Deze omgeving zal worden gebruikt tijdens het labo PHP (OLA Server-side scripting). Met deze manual kan je ook aan de slag op om het even welke Mac of Windows-PC waarop Docker is geïnstalleerd.


Quick reference guide


1. Docker starten

Je start het programma Docker. Docker is pas beschikbaar in de terminal wanneer de blokjes van het Docker-icoon in de menubalk (mac) / taakbalk (Win) niet meer bewegen.


2. Mappenstructuur opzetten

Het is onze bedoeling dat je slechts 1 maal een LAMP-omgeving opzet voor het labo PHP en deze steeds opnieuw gebruikt voor de volgende labosessie. Voor het opzetten van deze omgeving geven we jullie een mappenstructuur waarin je al je labo-oplossingen kan plaatsen, maar die tegelijk de nodige referenties bevat om de LAMP-omgeving te starten, die je labo-oplossingen host.


Unzip daarom (éénmalig) het bestand 'DockerLAMP.zip' (bijlage onderaan deze pagina), in de map die jij persoonlijk had voorzien voor het labo. Je krijgt dan volgende structuur in je labomap:

  • Het bestand 'docker-compose.yml' laat je onaangeroerd. Het bevat de beschrijving van de virtuele LAMP-omgeving. 
  • De map 'www' is de document root van de webserver. Al je PHP-code en de nodige assets (afbeeldingen, css, js, ...) kan je hierin in mappen organiseren. We hebben er voor jou al een handige index.php-script in geplaatst die je zal toelaten om doorheen je mappen te navigeren.
  • De map 'mysql' is bij de start leeg. In deze map wordt de folder van de virtuele omgeving gemount waarin de databankserver al zijn databanken/instellingen opslaat onder de vorm van binaire data. Dit zal het mogelijk maken om de volledige toestand van je databank bij te houden, zelfs wanneer je de LAMP-omgeving opnieuw opbouwt (op een andere PC bijvoorbeeld).


3. Starten/stoppen van de LAMP-omgeving

Starten doe je steeds als volgt:

  1. je start een terminal en navigeert (cd ...) naar de labomap (= de map waarin 'docker-compose.yml' zich bevindt)
  2. je voert volgend commando uit:  docker-compose up

Technisch gezien zal dit commando de omgeving opbouwen die in 'docker-compose.yml' staat beschreven. Deze bestaat uit 1 container. Het commando zal (a) de LAMP-image op de PC downloaden indien de image niet aanwezig is (b) een container bouwen op basis van de image indien het systeem geen container voor dit .yml-bestand bevat (c) de container starten.  De omgeving wordt gestart in interactieve mode m.a.w. je kan de output zien van de containers:


Indien de LAMP-container gestart wordt met een lege MySQL-map, wordt de databankserver geïnitialiseerd en wordt er een gebruiker 'admin' aangemaakt met een random gegenereerd paswoord (zie screenshot). Hou dit paswoord bij als je met deze databankconfiguratie wil verderwerken!!


De success-mededelingen onderaan de screenshot vertellen ons dat de databank- en webserver draaien. Zoals aangegeven in 'docker-compose.yml', werd poort 80 (HTTP) van de container doorverbonden met poort 8080 van de lokale computer. Dit betekent dat de webserver bereikbaar is op de lokale computer via http://localhost:8080/ .


De LAMP-omgeving stop je met Ctrl+C. (Deze stop is 'graceful': je stuurt een QUIT-signaal naar de betrokken containers. Druk nogmaals Ctrl+C voor een harde stop.)


4. De theorieslides hosten op deze omgeving

Je clonet het lesmateriaal in de document root:

cd www
git clone https://github.com/mjoris/ws-ss-course-materials.git


Eens binnengehaald is het beschikbaar via http://localhost:8080/ws-ss-course-materials .

Om tot de laatste versie te updaten (iets wat je geregeld zal moeten doen) voer je onderstaande commando's in:

cd ws-ss-course-materials
git reset --hard
git pull


5. Databanktoegang met phpMyAdmin

De databankserver laat geen 'remote connections' toe, dus ook niet met de lokale computer. phpMyAdmin werd wel geïnstalleerd om te kunnen interageren met de databankserver:


Inloggen doe je met de 'admin'-account en het aangeleverde paswoord (zie puntje 3.).


6. PHP-CLI op de container zelf

Je beschikt ook over PHP-CLI. Je kan de PHP-versie van de LAMP-omgeving command-line uitvoeren door de terminal te starten van de LAMP-container zelf.

Open - terwijl de LAMP-container draait -  een nieuw terminalvenster op je lokale computer. Je gaat op zoek naar (de beginletters) van LAMP-container-ID en gebruikt deze om te connecteren met /bin/bash van de container:

> docker ps
CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                                          NAMES
2bd449df62e0        mattrayner/lamp:latest-1604-php7   "/run.sh"           11 days ago         Up 43 minutes       0.0.0.0:8080->80/tcp, 0.0.0.0:3307->3306/tcp   lamptest_lamp_1

> docker exec -it 2b /bin/bash
root@2bd449df62e0:/#

Vanuit de container gezien is het pad naar de (gemounte) document root /var/www/html

root@2bd449df62e0:/# cd /var/www/html
root@2bd449df62e0:/var/www/html# ls
a.php index.php labo1 labo2
root@2bd449df62e0:/var/www/html# php a.php
Hello World!
root@2bd449df62e0:/var/www/html#

Je sluit de terminal af met Ctrl+C.


7. De LAMP-omgeving verwijderen

  • De virtuele omgeving verwijder je met het commando docker-compose down (vanuit de map waarin 'docker-compose.yml' zich bevindt). De gemounte volumes worden niet mee verwijderd (dus ook niet de databankbestanden).