📋 Στόχοι Μαθήματος
Στο τέλος του μαθήματος ο φοιτητής θα μπορεί να:
- Εξηγεί τι είναι το Docker και γιατί το χρησιμοποιούμε
- Κατανοεί τη διαφορά μεταξύ Image και Container
- Εγκαθιστά το Docker Desktop στον υπολογιστή του
- Εξηγεί τι είναι το Laravel Framework και το MVC
- Δημιουργεί νέο Laravel project με Docker (Laravel Sail)
- Περιγράφει τη ροή ενός αιτήματος σε Laravel
- Αναγνωρίζει τη δομή ενός Laravel project
🛠️ Το Περιβάλλον Ανάπτυξης
Πριν γράψουμε οποιονδήποτε κώδικα, χρειαζόμαστε ένα σταθερό περιβάλλον. Σε μια web εφαρμογή απαιτούνται:
- Web Server (Apache, Nginx)
- Γλώσσα προγραμματισμού (PHP)
- Βάση δεδομένων (MySQL)
- Εργαλεία ανάπτυξης (Composer, Node.js)
Το Docker λύνει αυτό το πρόβλημα δημιουργώντας απομονωμένα περιβάλλοντα (containers), ώστε η εφαρμογή να τρέχει πάντα με τον ίδιο τρόπο.
Το Docker δεν ανήκει στην εφαρμογή. Ανήκει στο πώς τρέχει η εφαρμογή. Είναι το "περιβάλλον", όχι ο "κώδικας".
🐳 Τι είναι το Docker (Θεωρητικά)
Το Docker βασίζεται σε δύο βασικές έννοιες:
| Έννοια | Περιγραφή | Παρομοίωση |
|---|---|---|
| Image | Το "σχέδιο" - περιέχει όλα τα απαραίτητα | 📐 Αρχιτεκτονικό σχέδιο σπιτιού |
| Container | Το "τρέχον αντίγραφο" του image | 🏠 Το χτισμένο σπίτι |
Χαρακτηριστικά κάθε Container
- Είναι ανεξάρτητο από τα υπόλοιπα
- Περιέχει μόνο ό,τι χρειάζεται
- Μπορεί να διαγραφεί χωρίς απώλεια κώδικα
- Γνωρίζει MVC
- Γνωρίζει Laravel
- Ενδιαφέρεται για τον κώδικα
Απλώς εξασφαλίζει ότι: «Η εφαρμογή τρέχει σε ελεγχόμενο περιβάλλον»
Γιατί χρησιμοποιούμε Docker;
| Πρόβλημα ΧΩΡΙΣ Docker | Λύση ΜΕ Docker |
|---|---|
| 😫 "Στον δικό μου υπολογιστή δουλεύει!" | ✅ Ίδιο περιβάλλον παντού |
| 😫 Εγκατάσταση PHP, MySQL, Apache χειροκίνητα | ✅ Όλα έτοιμα με μία εντολή |
| 😫 Διαφορετικές εκδόσεις PHP σε κάθε μηχάνημα | ✅ Καθορισμένη έκδοση για όλους |
| 😫 Conflicts μεταξύ projects | ✅ Κάθε project σε ξεχωριστό container |
Πώς λειτουργεί το Docker
Αρχεία που περιγράφουν τι χρειάζεται η εφαρμογή
"Πακέτο" με όλα τα απαραίτητα (PHP, MySQL, κτλ)
Το image "τρέχει" - η εφαρμογή είναι ζωντανή!
🖐️ Hands-on: Πρακτική Εγκατάσταση Docker
Ας δούμε βήμα-βήμα πώς εγκαθιστούμε και χρησιμοποιούμε το Docker στην πράξη.
Επισκεφθείτε την επίσημη σελίδα εγκατάστασης ανάλογα με το λειτουργικό σας:
- Mac:
https://docs.docker.com/desktop/setup/install/mac-install/ - Windows:
https://docs.docker.com/desktop/setup/install/windows-install/ - Linux:
https://docs.docker.com/desktop/setup/install/linux/
Ακολουθήστε τις οδηγίες του installer για το λειτουργικό σας σύστημα.
Ανοίξτε το Docker Desktop και επιβεβαιώστε ότι τρέχει:
Θα δημιουργήσουμε δύο containers με Apache σε διαφορετικές θύρες για να δούμε πώς λειτουργεί η απομόνωση!
🔹 Container 1 – Apache στη θύρα 8090
http://localhost:8090
🔹 Container 2 – Apache στη θύρα 8091
http://localhost:8091
- Δύο ανεξάρτητοι Apache servers τρέχουν ταυτόχρονα
- Χρησιμοποιούν το ίδιο image (httpd:2.4) αλλά είναι διαφορετικά containers
- Κάθε ένα ακούει σε διαφορετική θύρα (8090 vs 8091)
- Είναι πλήρως απομονωμένα μεταξύ τους!
📝 Αλλαγή περιεχομένου μέσω Docker Desktop (GUI)
Παρακάτω σου δείχνω πώς να βάλεις διαφορετικά αρχεία (index.html) σε κάθε Apache container ΜΕΣΑ από το Docker Desktop, χωρίς terminal.
Έχεις:
apache-8090→ http://localhost:8090apache-8091→ http://localhost:8091
Θέλεις διαφορετικό περιεχόμενο στον καθένα!
- Docker Desktop → Containers
- Κλικ στο
apache-8090
Θα δεις tabs όπως: Logs, Inspect, Files, Exec
- Πήγαινε στο tab Files
- Άνοιξε τον φάκελο:
/usr/local/apache2/htdocs
Αυτός είναι ο DocumentRoot του Apache - εδώ βρίσκονται τα αρχεία της ιστοσελίδας.
Έχεις 2 επιλογές:
- Επιλογή Α: Κάνε διπλό κλικ στο
index.htmlγια να το επεξεργαστείς - Επιλογή Β: Δεξί κλικ → Edit file
<!DOCTYPE html>
<html>
<head>
<title>Server 8090</title>
</head>
<body>
<h1>🟢 Apache Container 8090</h1>
<p>Αυτός είναι ο πρώτος server!</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Server 8091</title>
</head>
<body>
<h1>🔵 Apache Container 8091</h1>
<p>Αυτός είναι ο δεύτερος server!</p>
</body>
</html>
- Άνοιξε
http://localhost:8090→ Βλέπεις "🟢 Apache Container 8090" - Άνοιξε
http://localhost:8091→ Βλέπεις "🔵 Apache Container 8091"
Δύο διαφορετικές σελίδες, δύο διαφορετικά containers!
Οι αλλαγές μέσα στο container είναι προσωρινές. Αν διαγράψεις το container και το ξαναφτιάξεις, θα χαθούν. Για μόνιμες αλλαγές χρησιμοποιούμε volumes (θα το δούμε αργότερα).
💻 Πώς μπαίνεις στο terminal του container (shell)
Μπορείς να μπεις "μέσα" στο container και να τρέχεις εντολές σαν να ήσουν σε ξεχωριστό υπολογιστή!
🔹 Apache container 8090
Μετά θα δεις κάτι σαν:
Μπορείς να τρέξεις εντολές Linux, να δεις αρχεία, να κάνεις αλλαγές.
🔹 Apache container 8091
-it;
-i→ interactive (κρατά ανοιχτό το input)-t→ terminal (TTY)
Χωρίς -it δεν έχεις κανονικό shell.
🔧 Εγκατάσταση εργαλείων μέσα στο container
Το Apache image είναι βασισμένο σε Debian Linux. Μπορείς να εγκαταστήσεις εργαλεία με τον package manager apt:
Τα εργαλεία που εγκαθιστάς μέσα στο container είναι προσωρινά. Αν διαγράψεις το container, θα χαθούν. Για μόνιμες εγκαταστάσεις χρησιμοποιούμε custom Dockerfile.
# Μπες στο container docker exec -it apache-8090 bash # Πήγαινε στον φάκελο htdocs cd /usr/local/apache2/htdocs # Δημιούργησε νέο αρχείο echo "<h1>Hello from Terminal!</h1>" > test.html # Έξοδος από το container exit
Τώρα μπορείς να δεις το αρχείο στο: http://localhost:8090/test.html
🗂️ Διαχείριση των Containers
Αυτό το παράδειγμα δείχνει τη δύναμη του Docker: μπορούμε να τρέξουμε πολλαπλές υπηρεσίες από το ίδιο image, σε διαφορετικές θύρες, χωρίς conflicts. Στο Laravel θα κάνουμε κάτι παρόμοιο αλλά με PHP + MySQL + Redis!
🔹 Container 3 – Ubuntu με πολλαπλές θύρες
Ας δημιουργήσουμε ένα τρίτο container με Ubuntu 24.04 που θα έχει δύο port mappings:
📖 Επεξήγηση εντολών
sleep infinity;
Το Ubuntu image δεν έχει κάποια υπηρεσία που τρέχει by default. Χωρίς το sleep infinity, το container θα σταματούσε αμέσως! Με αυτή την εντολή, το container μένει ανοιχτό και μπορούμε να μπούμε μέσα και να εγκαταστήσουμε ό,τι θέλουμε.
Είσοδος στο Ubuntu container
Τώρα μπορείς να εγκαταστήσεις ό,τι θέλεις μέσα στο Ubuntu:
Θα δεις prompt:
Τώρα έχεις χρήστη gmpardis με password 123456 για να συνδεθείς στο phpMyAdmin!
- Web server:
http://localhost:8092 - MySQL:
localhost:3307 - phpMyAdmin:
http://localhost:8092/phpmyadmin
- httpd:2.4 → Έτοιμο image με Apache προεγκατεστημένο και ρυθμισμένο
- ubuntu:24.04 → "Καθαρό" λειτουργικό, εσύ εγκαθιστάς ό,τι θέλεις
Το Ubuntu σου δίνει πλήρη έλεγχο αλλά απαιτεί περισσότερη δουλειά!
📦 Μεταφορά Container
Μπορείς να μεταφέρεις το container που έφτιαξες σε άλλον υπολογιστή!
🔹 Μετατρέπεις το container σε image
1️⃣ Στον υπολογιστή σου (Mac)
Παίρνει το τρέχον container (Ubuntu + Apache + PHP + MariaDB + phpMyAdmin) και το αποθηκεύει σαν Docker image.
2️⃣ Αποθήκευση σε αρχείο
👉 Δημιουργεί αρχείο gmpardis-lamp.tar
3️⃣ Μεταφορά σε Windows
- με USB
- με SCP
- με cloud (Drive κτλ)
4️⃣ Στον Windows υπολογιστή
(με Docker Desktop εγκατεστημένο)
5️⃣ Τρέχεις το container στα Windows
👉 Ανοίγεις: http://localhost:8092/phpmyadmin
🏗️ MVC Αρχιτεκτονική
1. Τι πρόβλημα λύνει το MVC;
- Όλα είναι ανακατεμένα σε ένα αρχείο
- HTML + PHP + SQL μαζί
- Δύσκολη συντήρηση
- Χάος 😵
👉 Το MVC βάζει τάξη στον κώδικα.
2. Τι σημαίνει MVC
MVC = Model – View – Controller
Χωρίζουμε την εφαρμογή σε 3 κομμάτια, το καθένα με συγκεκριμένο ρόλο.
3. View (Τι βλέπει ο χρήστης)
- HTML
- Λίγη εμφάνιση
- Καμία λογική
📌 Παράδειγμα View:
- μιλάει με βάση
- κάνει υπολογισμούς
4. Model (Τα δεδομένα)
- Αντιπροσωπεύει δεδομένα
- Μιλάει με τη βάση
- Δεν ξέρει τίποτα για HTML
📌 Παράδειγμα Model:
- εμφανίζει σελίδες
- ξέρει πώς φαίνεται ο χρήστης
5. Controller (Ο συντονιστής)
- Δέχεται το αίτημα του χρήστη
- Μιλάει στο Model
- Στέλνει δεδομένα στο View
📌 Παράδειγμα Controller:
6. Πώς δουλεύουν μαζί (ροή)
1️⃣ Ο χρήστης ανοίγει μια σελίδα
2️⃣ Ο Controller ενεργοποιείται
3️⃣ Ο Controller ζητά δεδομένα από το Model
4️⃣ Το Model επιστρέφει δεδομένα
5️⃣ Ο Controller τα στέλνει στο View
6️⃣ Το View εμφανίζεται στον χρήστη
7. Παράδειγμα χωρίς MVC (ΛΑΘΟΣ)
8. Παράδειγμα με MVC (ΣΩΣΤΟ)
Model (User.php)
Controller (UserController.php)
View (UserView.php)
9. Γιατί το MVC είναι καλό;
- ✔ Καθαρός κώδικας
- ✔ Εύκολες αλλαγές
- ✔ Ομαδική δουλειά
- ✔ Λιγότερα bugs
- ✔ Έτοιμο για frameworks (Laravel)
10. Πώς συνδέεται με Laravel
- Models →
app/Models - Controllers →
app/Http/Controllers - Views →
resources/views
Για να εγκατασταθεί το Laravel, χρειάζονται εργαλεία όπως PHP και Composer. Στη σύγχρονη πρακτική, αυτά τρέχουν μέσα από Docker.
🔴 Τι είναι το Laravel (Θεωρητικά)
Το Laravel είναι ένα framework που οργανώνει την ανάπτυξη εφαρμογών. Παρέχει:
- Δομή φακέλων - Ξεκάθαρη οργάνωση κώδικα
- Έτοιμες λύσεις - Authentication, routing, database
- Κανόνες αρχιτεκτονικής - MVC pattern
- Πού γράφεται κάθε κομμάτι κώδικα
- Ποιος είναι υπεύθυνος για τι
Για να εγκατασταθεί το Laravel, χρειάζονται εργαλεία όπως PHP και Composer. Στη σύγχρονη πρακτική, αυτά τρέχουν μέσα από Docker.
| Χαρακτηριστικό | Περιγραφή |
|---|---|
| 📁 MVC Architecture | Model-View-Controller - Οργανωμένη δομή κώδικα |
| 🛣️ Routing | Εύκολη διαχείριση URLs και endpoints |
| 🗄️ Eloquent ORM | Εύκολη επικοινωνία με βάσεις δεδομένων |
| 🎨 Blade Templates | Δυναμικά HTML templates |
| 🔐 Authentication | Έτοιμο σύστημα login/register |
| 🐳 Laravel Sail | Εύκολη εγκατάσταση με Docker |
🏗️ Η Αρχιτεκτονική MVC
Το MVC (Model-View-Controller) είναι αρχιτεκτονικό πρότυπο που χωρίζει την εφαρμογή σε τρία μέρη:
📊 Model
Τα Δεδομένα
- Αναπαριστά τα δεδομένα
- Επικοινωνεί με τη βάση
- Περιέχει επιχειρησιακή λογική
👁️ View
Η Εμφάνιση
- Δείχνει δεδομένα στον χρήστη
- HTML templates (Blade)
- Δεν περιέχει λογική
🎮 Controller
Ο Συντονιστής
- Δέχεται το αίτημα
- Ελέγχει τη ροή
- Συντονίζει Model & View
- Διαχωρισμός ευθυνών - Κάθε μέρος κάνει μία δουλειά
- Καθαρός κώδικας - Εύκολος στην ανάγνωση
- Ευκολία συντήρησης - Αλλαγές σε ένα μέρος δεν επηρεάζουν τα άλλα
Model (Αναλυτικά)
- Αναπαριστά τα δεδομένα της εφαρμογής
- Επικοινωνεί με τη βάση δεδομένων
- Περιέχει επιχειρησιακή λογική (business logic)
Στο Laravel, τα Models αντιστοιχούν σε πίνακες της βάσης και χειρίζονται εγγραφές.
Το Model ΔΕΝ: εμφανίζει HTML, χειρίζεται HTTP αιτήματα
View (Αναλυτικά)
- Είναι η εμφάνιση της εφαρμογής
- Δείχνει δεδομένα στον χρήστη
- ΔΕΝ περιέχει λογική εφαρμογής
Στο Laravel, τα Views είναι Blade templates που δέχονται δεδομένα και εμφανίζουν αποτέλεσμα.
Το View ΔΕΝ: μιλάει με βάση δεδομένων, παίρνει αποφάσεις
Controller (Αναλυτικά)
- Δέχεται το αίτημα από τον χρήστη
- Ελέγχει τη ροή της εφαρμογής
- Συντονίζει Model και View
Στο Laravel, κάθε route οδηγεί σε Controller που αποφασίζει τι θα επιστραφεί.
Ο Controller είναι: ο μεσάζοντας της εφαρμογής
🔄 Ροή Αιτήματος σε Laravel με Docker
Πώς επεξεργάζεται ένα αίτημα
Ο χρήστης ζητά μια σελίδα (π.χ. /login)
Το Docker έχει ήδη σηκώσει PHP, MySQL, Web Server
Το Laravel λαμβάνει το αίτημα και το routing οδηγεί στον κατάλληλο Controller
Ο Controller καλεί το Model για να πάρει δεδομένα
Το Model επιστρέφει δεδομένα από τη βάση
Ο Controller στέλνει τα δεδομένα στο View
Το View εμφανίζεται στον browser
Κάθε βήμα έχει συγκεκριμένη ευθύνη.
🔐 Θεωρητικό Παράδειγμα: Login
Ας δούμε πώς συνεργάζονται όλα σε ένα πραγματικό σενάριο login:
| Επίπεδο | Ρόλος | Τι κάνει |
|---|---|---|
| 🐳 Docker | Περιβάλλον | Εξασφαλίζει PHP και βάση δεδομένων |
| 🔴 Laravel | Framework | Οργανώνει το authentication |
| 🎮 Controller | Συντονιστής | Επεξεργάζεται το login request |
| 📊 Model | Δεδομένα | Ελέγχει τον χρήστη στη βάση |
| 👁️ View | Εμφάνιση | Εμφανίζει επιτυχία ή σφάλμα |
Αυτός ο διαχωρισμός κάνει τον κώδικα εύκολο στην κατανόηση και συντήρηση.
⛵ Laravel Sail (Docker + Laravel μαζί)
Το Laravel παρέχει το Sail, το οποίο είναι:
- ✅ Επίσημη λύση Docker από την ομάδα του Laravel
- ✅ Προρυθμισμένο περιβάλλον με PHP, MySQL, Redis
- ✅ Γέφυρα μεταξύ Docker και Laravel
Το Sail επιτρέπει στο Laravel να "ζήσει" μέσα σε containers. Για να δημιουργηθεί νέο project, χρησιμοποιείται ένα container που περιέχει PHP και Composer - χωρίς να απαιτείται τοπική εγκατάσταση PHP!
Δημιουργία νέου Laravel Project
- Το Docker Desktop πρέπει να τρέχει
- Σύνδεση στο internet
- Τουλάχιστον 4GB ελεύθερη μνήμη RAM
Εκκίνηση του Project
Άνοιξε τον browser στη διεύθυνση: http://localhost
Θα δεις την αρχική σελίδα του Laravel!
Διακοπή των containers
⌨️ Βασικές Εντολές Sail & Docker
Εντολές Laravel Sail
| Εντολή | Περιγραφή |
|---|---|
./vendor/bin/sail up |
Ξεκινά τα containers |
./vendor/bin/sail up -d |
Ξεκινά στο background |
./vendor/bin/sail down |
Σταματά τα containers |
./vendor/bin/sail php artisan |
Τρέχει εντολές artisan |
./vendor/bin/sail composer |
Τρέχει εντολές composer |
./vendor/bin/sail mysql |
Σύνδεση στη MySQL |
./vendor/bin/sail shell |
Είσοδος στο container |
Για να μη γράφεις κάθε φορά ./vendor/bin/sail, πρόσθεσε αυτό στο ~/.bashrc ή ~/.zshrc:
Χρήσιμες εντολές Docker
📂 Δομή Laravel Project
Όταν δημιουργείς ένα Laravel project, δημιουργείται η παρακάτω δομή φακέλων:
Τα πιο σημαντικά αρχεία για αρχή:
Εδώ ορίζουμε τα URLs της εφαρμογής μας (routes).
Εδώ γράφουμε τους Controllers.
Εδώ γράφουμε τα Models.
Εδώ βάζουμε τα HTML templates (Blade files).
Εδώ βάζουμε passwords, API keys, ρυθμίσεις βάσης.
⚙️ Το αρχείο .env
Το .env περιέχει τις ρυθμίσεις του περιβάλλοντος:
Το αρχείο .env περιέχει passwords και ευαίσθητα δεδομένα. ΠΟΤΕ μην το ανεβάζεις στο GitHub! Είναι ήδη στο .gitignore.
🎯 Γιατί αυτή η προσέγγιση είναι σωστή
| Τεχνολογία | Προσφέρει |
|---|---|
| 🐳 Docker | Σταθερό περιβάλλον - Ίδιο παντού |
| 🔴 Laravel | Παραγωγικότητα - Έτοιμες λύσεις |
| 🏗️ MVC | Καθαρή αρχιτεκτονική - Οργάνωση |
Επαγγελματική ανάπτυξη εφαρμογών με σύγχρονες πρακτικές!
📝 Συμπέρασμα
Τι μάθαμε σήμερα:
- ✅ Docker → Τρέχει την εφαρμογή σε containers
- ✅ Laravel → Οργανώνει τον κώδικα με framework
- ✅ MVC → Δομεί τη λογική (Model-View-Controller)
- ✅ Sail → Γέφυρα Docker-Laravel
- ✅ Βασικές εντολές:
sail up,sail down,sail artisan - ✅ Δομή φακέλων Laravel (routes, views, controllers, models)
Αν κατανοήσεις τη σχέση Docker → Laravel → MVC, κατανοείς τη βάση των σύγχρονων web εφαρμογών!
Γρήγορη Αναφορά Εντολών
| Ενέργεια | Εντολή |
|---|---|
| Νέο Laravel project | curl -s "https://laravel.build/όνομα" | bash |
| Εκκίνηση Docker | ./vendor/bin/sail up -d |
| Διακοπή Docker | ./vendor/bin/sail down |
| Migrations | ./vendor/bin/sail php artisan migrate |
| Σύνδεση MySQL | ./vendor/bin/sail mysql |
- Βεβαιωθείτε ότι το Docker Desktop είναι εγκατεστημένο
- Δημιουργήστε ένα Laravel project και επιβεβαιώστε ότι τρέχει
- Εξερευνήστε τη δομή φακέλων
✅ Τέλος Μαθήματος 11
Εγκατάσταση Laravel και Docker - Αρχιτεκτονική MVC
Πανεπιστήμιο Πελοποννήσου - Τμήμα Ψηφιακών Συστημάτων
Μπάρδης Γιώργος