Current directory: /home/klas4s23/domains/585455.klas4s23.mid-ica.nl/public_html/Gastenboek/uploads
# π³ Docker Installation Guide
## English Vocabulary Learning Application - Docker Setup
Deze guide laat zien hoe je de applicatie kunt draaien met Docker in plaats van XAMPP.
## π Vereisten
- **Docker Desktop** geΓ―nstalleerd ([Download hier](https://www.docker.com/products/docker-desktop))
- **Docker Compose** (komt mee met Docker Desktop)
- Minimaal 2GB vrije RAM
- Poorten 80, 3306, en 8080 beschikbaar
## π Snelle Start
### Stap 1: Start Docker Desktop
Zorg dat Docker Desktop draait op je computer.
### Stap 2: Open Terminal in Project Directory
```powershell
# Navigeer naar project directory
cd "C:\Users\ciana\OneDrive - ROC Midden Nederland\School\Projecten\l7-pro-2-e-learning-2023-Epolleke"
```
### Stap 3: Start de Containers
```powershell
# Build en start alle containers
docker-compose up -d
```
Dit commando:
- β
Bouwt de PHP/Apache container
- β
Start MySQL database
- β
Start phpMyAdmin
- β
Importeert automatisch de database schema
- β
Configureert netwerk tussen containers
### Stap 4: Wacht tot Alles Klaar is
```powershell
# Check status van containers
docker-compose ps
```
Alle containers moeten "Up" status hebben.
### Stap 5: Open de Applicatie
- **Website**: http://localhost
- **phpMyAdmin**: http://localhost:8080
- Server: `db`
- Username: `english_user`
- Password: `english_pass`
## π― Docker Compose Services
### 1. **web** - PHP/Apache Server
- Port: 80
- PHP 8.2 met Apache
- PDO MySQL extensie
- Hot-reload (wijzigingen zijn direct zichtbaar)
### 2. **db** - MySQL Database
- Port: 3306
- MySQL 8.0
- Automatische import van `schema.sql`
- Persistent data storage
### 3. **phpmyadmin** - Database Management
- Port: 8080
- Web interface voor database beheer
- Direct verbonden met MySQL
## π§ Handige Docker Commando's
### Container Beheer
```powershell
# Start containers
docker-compose up -d
# Stop containers
docker-compose down
# Stop en verwijder alles inclusief volumes
docker-compose down -v
# Herstart containers
docker-compose restart
# Bekijk logs
docker-compose logs -f
# Bekijk logs van specifieke service
docker-compose logs -f web
docker-compose logs -f db
```
### Database Beheer
```powershell
# Open MySQL shell
docker-compose exec db mysql -u english_user -p
# Password: english_pass
# Importeer database opnieuw
docker-compose exec -T db mysql -u english_user -penglish_pass english_learning_app < database/schema.sql
# Maak database backup
docker-compose exec db mysqldump -u english_user -penglish_pass english_learning_app > backup.sql
# Restore database backup
docker-compose exec -T db mysql -u english_user -penglish_pass english_learning_app < backup.sql
```
### Container Inspecteren
```powershell
# Open bash in web container
docker-compose exec web bash
# Open bash in database container
docker-compose exec db bash
# Bekijk container details
docker-compose ps
# Bekijk resource gebruik
docker stats
```
## π Code Wijzigingen
Dankzij volume mounts zijn code wijzigingen **direct zichtbaar**:
1. Edit een bestand (bijv. `index.html` of `js/app.js`)
2. Refresh browser - wijzigingen zijn er!
3. Voor PHP bestanden: geen restart nodig
## ποΈ Database Credentials
### Root Toegang (Admin)
- Host: `localhost` (of `db` binnen containers)
- Username: `root`
- Password: `root_password`
- Database: `english_learning_app`
### Application User
- Host: `localhost` (of `db` binnen containers)
- Username: `english_user`
- Password: `english_pass`
- Database: `english_learning_app`
De applicatie gebruikt automatisch de juiste credentials via environment variables.
## π Troubleshooting
### Containers Starten Niet
**Probleem:** `Error: port is already allocated`
**Oplossing:**
```powershell
# Check welk proces poort gebruikt
netstat -ano | findstr :80
netstat -ano | findstr :3306
# Stop Docker en herstart
docker-compose down
docker-compose up -d
```
### Database Connectie Fout
**Probleem:** "Database connection failed"
**Oplossing:**
```powershell
# Check of database container draait
docker-compose ps
# Bekijk database logs
docker-compose logs db
# Wacht tot database volledig gestart is
docker-compose up -d
Start-Sleep -Seconds 30
```
### Volumes Resetten
**Probleem:** Database heeft oude data
**Oplossing:**
```powershell
# Stop en verwijder alles inclusief data
docker-compose down -v
# Herstart clean
docker-compose up -d
```
### PHP Errors Niet Zichtbaar
**Probleem:** Witte pagina, geen errors
**Oplossing:**
```powershell
# Bekijk web container logs
docker-compose logs web
# Of real-time:
docker-compose logs -f web
```
### Poort Conflicten
Als poort 80, 3306, of 8080 al in gebruik is, pas dan `docker-compose.yml` aan:
```yaml
services:
web:
ports:
- "8000:80" # Gebruik poort 8000 i.p.v. 80
db:
ports:
- "3307:3306" # Gebruik poort 3307 i.p.v. 3306
phpmyadmin:
ports:
- "8081:80" # Gebruik poort 8081 i.p.v. 8080
```
## π Container Structuur
```
βββββββββββββββββββββββββββββββββββββββ
β Docker Network β
β (english_learning_network) β
β β
β ββββββββββββββββ β
β β web β β
β β PHP 8.2 ββββ http://localhost
β β Apache β β
β ββββββββ¬ββββββββ β
β β β
β β β
β ββββββββββββββββ β
β β db β β
β β MySQL 8.0 ββββ localhost:3306
β ββββββββ¬ββββββββ β
β β β
β β β
β ββββββββββββββββ β
β β phpmyadmin β β
β β Web UI ββββ localhost:8080
β ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββ
```
## π Security Notes
**Let op:** Dit is een development setup. Voor productie:
- [ ] Wijzig alle wachtwoorden
- [ ] Gebruik secrets in plaats van plain text passwords
- [ ] Verwijder phpMyAdmin of beveilig met authenticatie
- [ ] Gebruik HTTPS met SSL certificaten
- [ ] Beperk toegang met firewalls
- [ ] Update regularly: `docker-compose pull`
## π Voordelen van Docker vs XAMPP
### β
Docker Voordelen
- Geen conflicten met andere software
- Consistente omgeving op elk systeem
- Makkelijk te delen met teamleden
- Snelle setup (1 commando)
- GeΓ―soleerde services
- Makkelijk meerdere projecten parallel
### β οΈ XAMPP Voordelen
- Simpeler voor beginners
- Grafische interface
- Geen Docker kennis nodig
## π’ Deployment naar Productie
### Docker Hub (Optioneel)
```powershell
# Login naar Docker Hub
docker login
# Tag image
docker tag l7-pro-2-e-learning-2023-epolleke_web yourusername/english-learning:latest
# Push naar Docker Hub
docker push yourusername/english-learning:latest
```
### Environment Variables voor Productie
Maak `.env` bestand:
```env
DB_HOST=production-mysql-host
DB_USER=prod_user
DB_PASSWORD=secure_production_password
DB_NAME=english_learning_app
```
Update `docker-compose.yml`:
```yaml
services:
web:
env_file:
- .env
```
## π Ontwikkel Workflow
### Dagelijks Gebruik
```powershell
# Ochtend: Start containers
docker-compose up -d
# Ontwikkel: Edit bestanden in VSCode
# Browser: Refresh om changes te zien
# Avond: Stop containers (optioneel)
docker-compose down
```
### Database Wijzigingen
```powershell
# Update schema.sql
# Herstart database met nieuwe schema:
docker-compose down -v
docker-compose up -d
```
## π Monitoring
### Real-time Logs
```powershell
# Alle containers
docker-compose logs -f
# Alleen web server
docker-compose logs -f web
# Laatste 100 regels
docker-compose logs --tail=100
```
### Resource Gebruik
```powershell
# Live monitoring
docker stats
# Container details
docker-compose top
```
## π― Volgende Stappen
1. β
Containers draaien? Open http://localhost
2. β
Test alle features in de applicatie
3. β
Bekijk database in phpMyAdmin
4. β
Maak backup van je data
5. β
Begin met ontwikkelen!
## π Hulp Nodig?
```powershell
# Docker help
docker --help
docker-compose --help
# Container status
docker-compose ps
# Verwijder alles en start opnieuw
docker-compose down -v
docker-compose up -d --build
```
---
**Happy Dockerizing! π³**