Εισαγωγή
Η Συνεχής Ενσωμάτωση (CI) και η Συνεχής Διάθεση (CD) είναι μερικά από τα πιο δημοφιλή θέματα στην ανάπτυξη λογισμικού αυτή τη στιγμή. Για να επιτευχθεί η πτυχή του CI/CD της αρχιτεκτονικής λογισμικού, οι προγραμματιστές κάνουν χρήση containers. Containers είναι ελαφριά, εικονικοποιημένα, φορητά, καθοριζόμενα από λογισμικό περιβάλλοντα. Μέσα στα containers, το λογισμικό μπορεί να εκτελείται απομονωμένο από άλλο λογισμικό που εκτελείται στο φυσικό μηχάνημα φιλοξενίας. Η εστίαση αυτού του οδηγού είναι στη χρήση της πλατφόρμας container Docker για την ανάπτυξη και εκτέλεση διαδικτυακών εφαρμογών. Το Docker βοηθά στην απλοποίηση της διαδικασίας εγκατάστασης μιας στοίβας διακομιστή ιστού. Σε αυτόν τον οδηγό, θα χρησιμοποιήσουμε τη στοίβα LEMP για να εξυπηρετήσουμε μια εφαρμογή Laravel εφαρμογή.
Η στοίβα LEMP συνδυάζει το Linux ως λειτουργικό σύστημα, Nginx ως διακομιστή ιστού, MySQL ως βάση δεδομένων, και τη γλώσσα PHP για συγγραφή σεναρίων και δυναμική επεξεργασία. Μπορείτε να ακολουθήσετε τον οδηγό μας για το πώς να εγκαταστήσετε και να ρυθμίσετε μια στοίβα LEMP στο Ubuntu. Το Laravel είναι ένα από τα κορυφαία πλαίσια PHP για την ανάπτυξη διαδικτυακών εφαρμογών.
Το Docker παρέχει ένα εργαλείο που ονομάζεται Docker Compose για τον καθορισμό της διαδικασίας εγκατάστασης ενός docker container. Το Docker Compose επιτρέπει στους προγραμματιστές να ορίζουν την υποδομή της εφαρμογής τους, τις υπηρεσίες, τους τόμους, τα δίκτυα και τυχόν εξαρτήσεις σε ένα αρχείο που ονομάζεται αρχείο docker-compose. Μπορεί να διαχειριστεί πολλαπλά Docker containers μέσω των εντολών του, όπως docker container create, docker container run, κ.λπ.
Σε αυτόν τον οδηγό, θα μάθετε πώς να αναπτύξετε μια διαδικτυακή εφαρμογή Laravel με Nginx και MySQL μέσα σε ένα Docker container. Οι ρυθμίσεις για ολόκληρη τη στοίβα θα καθοριστούν μέσα σε ένα αρχείο docker-compose, καθώς και σε άλλα αρχεία ρυθμίσεων για PHP, MySQL και Nginx. Ας ξεκινήσουμε!
Πρώτα απ' όλα
- Καθώς πρόκειται για έναν πρακτικό οδηγό, θα πρέπει να έχετε εγκατεστημένο το Ubuntu 20.04 ως αρχικό περιβάλλον λειτουργίας σας. Θα πρέπει επίσης να έχετε έναν μη-root χρήστη με δικαιώματα sudo. Εδώ είναι ένας οδηγός βήμα προς βήμα για να σας βοηθήσει να ρυθμίσετε τον διακομιστή Ubuntu σας.
- Πρέπει να εγκαταστήσετε το Docker. Έχουμε έναν οδηγό για το πώς να εγκαταστήσετε και να λειτουργήσετε το Docker στο Ubuntu 18.04.
- Πρέπει να εγκαταστήσετε το Docker Compose ακολουθώντας τον οδηγό από την επίσημη Docker documentation.
Βήμα 1: Λήψη του Laravel και Εγκατάσταση των Εξαρτήσεων
Το πρώτο βήμα είναι να λάβετε τον κώδικα του Laravel από ένα αποθετήριο (repo). Σε πραγματικά σενάρια μπορεί να έχετε τον κώδικα Laravel σας σε ένα αποθετήριο κάπου, π.χ. στο GitHub, στο Bit Bucket, στο Gitlab, κ.λπ. Ωστόσο, για χάρη αυτού του οδηγού, θα κλωνοποιήσουμε την τελευταία έκδοση από το επίσημο αποθετήριο του Laravel στο GitHub. Το αποθετήριο συνοδεύεται από ένα αρχείο composer, έναν διαχειριστή εξαρτήσεων σε επίπεδο εφαρμογής για την PHP. Εφόσον θέλουμε όλα να εκτελούνται μέσα στο Docker container, θα εγκαταστήσουμε τις εξαρτήσεις χρησιμοποιώντας την εικόνα Docker composer εικόνας. Αυτό θα μας βοηθήσει επίσης να αποφύγουμε την καθολική εγκατάσταση του composer στο πραγματικό μηχάνημα φιλοξενίας. Στη συνέχεια, ανοίξτε το τερματικό σας.
Μεταβείτε στον αρχικό σας κατάλογο:
|
1 |
cd ~ |
Εισαγάγετε την ακόλουθη εντολή για να κλωνοποιήσετε το αποθετήριο σε έναν κατάλογο που ονομάζεται laravel-web. Είστε ελεύθεροι να τον ονομάσετε όπως θέλετε. Κατά τη συγγραφή αυτού του οδηγού, όταν εκτελούμε αυτήν την εντολή, λαμβάνει την έκδοση 8 του Laravel. Όταν εκτελέσετε την εντολή, πιθανότατα θα βρείτε μια νέα έκδοση:
|
1 |
git clone https://github.com/laravel/laravel.git laravel-web |
Στη συνέχεια, μεταβείτε στον κατάλογο στον οποίο μόλις κλωνοποιήσατε το αποθετήριο:
|
1 |
cd ~/laravel-web |
Εισαγάγετε την ακόλουθη εντολή για να προσαρτήσετε τους καταλόγους που απαιτούνται από την εφαρμογή laravel σας χρησιμοποιώντας την composer image:
|
1 |
docker run --rm -v $(pwd):/app composer install |
Οι σημαίες -v και –rm στην εντολή docker run δημιουργούν ένα εφήμερο container που θα συνδεθεί με προσάρτηση (bind-mount) στον τρέχοντα κατάλογο πριν αφαιρεθεί. Η εντολή αντιγράφει τα περιεχόμενα του ~/laravel-web στο container και διασφαλίζει ότι ο φάκελος vendor που δημιουργήθηκε από το composer αντιγράφεται πίσω στον τρέχοντα κατάλογο.
Τώρα, πρέπει να αλλάξετε την ιδιοκτησία του καταλόγου laravel-web στον μη-root χρήστη. Αυτό θα επιτρέψει την εργασία με τον κώδικα της εφαρμογής σας ως μη-root χρήστης και την εκτέλεση διεργασιών μέσα στο container στα επόμενα βήματα. Εισαγάγετε την ακόλουθη εντολή για να αλλάξετε την ιδιοκτησία:
|
1 |
sudo chown -R $USER:$USER ~/laravel-web |
Ο κώδικας της εφαρμογής σας είναι πλέον στη θέση του. Ο κατάλογος ανήκει σε έναν μη-root χρήστη, οπότε μπορείτε να προχωρήσετε στον ορισμό των υπηρεσιών της εφαρμογής στο αρχείο docker-composer.
Βήμα 2: Δημιουργία του αρχείου Docker Compose
Το Docker Compose απλοποιεί τη διαδικασία δημιουργίας και ανάπτυξης μιας εφαρμογής. Μόλις ορίσετε τις ρυθμίσεις και τις υπηρεσίες, μπορείτε εύκολα να αναπτύξετε την εφαρμογή σας σε οποιοδήποτε κεντρικό μηχάνημα που έχει εγκατεστημένο το Docker και το Docker Compose χωρίς να ανησυχείτε για τις εξαρτήσεις της εφαρμογής. Το πιο σημαντικό είναι ότι μπορείτε να το κάνετε αυτό με μία μόνο εντολή Docker Compose, όπως θα δούμε στο Βήμα 9.
Σε αυτό το βήμα, θα ορίσετε ένα αρχείο Docker Compose με ρυθμίσεις για τον webserver, τη βάση δεδομένων και τις υπηρεσίες εφαρμογής που είναι απαραίτητες για την ανάπτυξη μιας εφαρμογής Laravel.
Τα αρχεία Docker Compose είναι YAML αρχεία που αποθηκεύονται με την επέκταση .yml. Λάβετε υπόψη ότι η σωστή εσοχή είναι απαραίτητη για ένα έγκυρο αρχείο Docker Compose. Εισαγάγετε την ακόλουθη εντολή για να δημιουργήσετε και να ανοίξετε το αρχείο με το nano για επεξεργασία:
|
1 |
nano ~/laravel-web/docker-compose.yml |
Στη συνέχεια, θα ορίσετε τρεις υπηρεσίες σε αυτό το αρχείο: app, webserver και db. Η ενότητα db ορίζει τα διαπιστευτήρια της βάσης δεδομένων για την εφαρμογή σας, οπότε φροντίστε να επιλέξετε έναν ισχυρό κωδικό πρόσβασης mysql_root_password και να τον αντικαταστήσετε σε αυτήν την ενότητα. Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
version: '2.0' services: #Υπηρεσία PHP app: build: context: . dockerfile: Dockerfile image: cloudsigma.com/php container_name: app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www/html/ networks: - app-network #Υπηρεσία Nginx webserver: image: nginx:alpine container_name: webserver restart: unless-stopped tty: true ports: - "80:80" - "443:443" networks: - app-network #Υπηρεσία MySQL db: image: mysql:5.7.32 container_name: db restart: unless-stopped tty: true ports: - "3306:3306" environment: MYSQL_DATABASE: laravel_web MYSQL_ROOT_PASSWORD: replace_mysql_root_password SERVICE_TAGS: dev SERVICE_NAME: mysql networks: - app-network #Δίκτυα Docker networks: app-network: driver: bridge |
Παρακάτω ακολουθούν επεξηγήσεις των ορισμών των υπηρεσιών από τον παραπάνω κώδικα:
- app: Ορίζει την εφαρμογή Laravel και εκτελεί μια προσαρμοσμένη εικόνα Docker, cloudsigma.com/php, την οποία θα ορίσουμε στο Βήμα 4. Ορίζει επίσης το working_dir στο container σε /var/www/html.
- webserver: Κάνει λήψη της nginx:alpine εικόνας από το Docker και εκθέτει τις θύρες 80 και 443.
- db: Κάνει λήψη της εικόνας mysql:5.7.32 από το Docker και ορίζει μερικές μεταβλητές περιβάλλοντος. Αυτές περιλαμβάνουν μια βάση δεδομένων με το όνομα laravel_web για την εφαρμογή και τον κωδικό πρόσβασης root για τη βάση δεδομένων. Μπορείτε να μετονομάσετε τη βάση δεδομένων με ένα όνομα της επιλογής σας. Θυμηθείτε να αντικαταστήσετε την ιδιότητα MYSQL_ROOT_PASSWORD με έναν ισχυρό κωδικό πρόσβασης. Αυτή η υπηρεσία αντιστοιχίζει επίσης τη θύρα 3306 στον κεντρικό υπολογιστή στη θύρα 3306 στο container.
Η ιδιότητα container_name σε κάθε υπηρεσία ορίζει ένα όνομα για το κοντέινερ που αντιστοιχεί στην υπηρεσία. Εάν δεν ορίσετε την ιδιότητα, το Docker επιλέγει ένα τυχαίο όνομα για κάθε κοντέινερ.
Η ιδιότητα networks ορίζει ένα δίκτυο bridge με το όνομα app-network το οποίο διευκολύνει την επικοινωνία μεταξύ των κοντέινερ. Ένα δίκτυο bridge ελέγχεται από μια γέφυρα λογισμικού που επιτρέπει την επικοινωνία μόνο μεταξύ κοντέινερ στο ίδιο δίκτυο bridge. Ο ελεγκτής λογισμικού της γέφυρας εγκαθιστά προγράμματα οδήγησης που εμποδίζουν την απευθείας επικοινωνία μεταξύ κοντέινερ σε διαφορετικά δίκτυα bridge. Αυτό εξασφαλίζει υψηλό επίπεδο ασφάλειας, καθώς μόνο οι σχετικές υπηρεσίες μπορούν να επικοινωνούν απευθείας. Μπορείτε να επιλέξετε να ορίσετε πολλαπλές υπηρεσίες και δίκτυα που συνδέονται με σχετικές λειτουργίες.
Βήμα 3: Πώς να διατηρήσετε τα δεδομένα
Η διαδικτυακή σας εφαρμογή θα διαχειρίζεται και θα εξυπηρετεί δεδομένα στους χρήστες σας. Σε αυτό το βήμα, θα σας καθοδηγήσουμε στον ορισμό volumes και bind mounts για τους ορισμούς των υπηρεσιών σας, ώστε να διατηρηθούν τα δεδομένα της εφαρμογής. Το Docker προσφέρει εξαιρετικές δυνατότητες, όπως bind mounts και volumes για τη διατήρηση δεδομένων και την αποθήκευση αρχείων ρυθμίσεων της εφαρμογής. Θα τα χρησιμοποιήσουμε για τη ρύθμιση της Laravel εφαρμογής μας με το Docker.
Τα volumes προτιμώνται για διάφορους λόγους, συμπεριλαμβανομένης της παροχής αντιγράφων ασφαλείας και της διατήρησης δεδομένων πέρα από τον κύκλο ζωής ενός κοντέινερ. Τα Bind Mounts συνήθως αναφέρονται σε έναν πραγματικό κατάλογο στο μηχάνημα υποδοχής. Όταν δημιουργείτε ένα volume, δημιουργείται ένας νέος κατάλογος μέσα στον κατάλογο αποθήκευσης του Docker, ο οποίος διαχειρίζεται από το Docker. Όταν δημιουργείτε ένα bind mount, ένα αρχείο ή ένας κατάλογος μέσα στο μηχάνημα υποδοχής προσαρτάται σε ένα κοντέινερ (με αναφορά στην απόλυτη διαδρομή του). Αυτό είναι κρίσιμο για τη διαδικτυακή μας εφαρμογή, επειδή όταν κάνετε αλλαγές στον κώδικα στο μηχάνημα υποδοχής, αυτές θα γίνονται αμέσως διαθέσιμες στο κοντέινερ.
Να είστε προσεκτικοί όταν χρησιμοποιείτε bind mounts. Οι διεργασίες που εκτελούνται μέσα στο κοντέινερ Docker μπορούν να κάνουν αλλαγές στο σύστημα αρχείων του υποδοχέα και να επηρεάσουν διεργασίες εκτός Docker που εκτελούνται στο σύστημα υποδοχής. Παρόλο που τα Docker mounts είναι μια ισχυρή δυνατότητα, να είστε ενήμεροι για αυτές τις επιπτώσεις στην ασφάλεια.
Έχοντας πει αυτό, ας δούμε πώς μπορούμε να χρησιμοποιήσουμε αυτές τις δύο δυνατότητες στη ρύθμισή μας. Αρχικά, θα ορίσουμε ένα volume για τη διατήρηση της βάσης δεδομένων MySQL. Στο αρχείο Docker Compose που είχαμε δημιουργήσει, κάτω από την υπηρεσία db, προσθέστε μια ιδιότητα volumes όπως επισημαίνεται παρακάτω:
|
1 2 3 4 5 6 7 8 |
#Υπηρεσία MySQL db: ... volumes: - dbdata:/var/lib/mysql/ networks: - app-network ... |
Όπως ορίστηκε, το volume dbdata θα διατηρήσει τα περιεχόμενα του /var/lib/mysql. Διευκολύνει τη λήψη αντιγράφων ασφαλείας και επιτρέπει την επανεκκίνηση των υπηρεσιών χωρίς απώλεια δεδομένων. Στη συνέχεια, θα πρέπει να προσθέσετε τον ορισμό των volumes στο τέλος του αρχείου Docker Compose για να είναι διαθέσιμος σε όλες τις υπηρεσίες. Εισαγάγετε το ακόλουθο απόσπασμα κώδικα στο κάτω μέρος του αρχείου:
|
1 2 3 4 |
#Volumes volumes: dbdata: driver: local |
Για να συνδεθείτε σε μια βάση δεδομένων MySQL, πρέπει να παρέχετε διαπιστευτήρια. Για να το κάνετε αυτό, ορίστε ένα bind mount προσθέτοντας το ακόλουθο επισημασμένο απόσπασμα κώδικα στην υπηρεσία db κάτω από την ιδιότητα volumes:
|
1 2 3 4 5 6 7 |
#Υπηρεσία MySQL db: ... volumes: - dbdata:/var/lib/mysql/ - ./mysql/my.cnf:/etc/mysql/my.cnf ... |
Ο κώδικας συνδέει το ~/laravel-web/mysql/my.cnf με το /etc/mysql/my.cnf στο κοντέινερ. Το συνδεδεμένο αρχείο είναι τα αρχεία ρυθμίσεων της MySQL που θα δημιουργήσουμε στο Βήμα 7.
Το κοντέινερ πρέπει να χρησιμοποιεί τον διακομιστή Nginx για να εξυπηρετεί τον κώδικα της εφαρμογής σας. Επομένως, θα ορίσουμε δύο bind mounts (ένα για το αρχείο ρυθμίσεων του Nginx και ένα για τον κώδικα της εφαρμογής), κάτω από την υπηρεσία webserver για αυτόν τον σκοπό. Προσθέστε το ακόλουθο απόσπασμα κώδικα για τον ορισμό των volumes κάτω από την υπηρεσία webserver:
|
1 2 3 4 5 6 7 8 |
#Υπηρεσία Nginx webserver: ... volumes: - ./:/var/www/html/ - ./nginx/conf.d/:/etc/nginx/conf.d/ networks: - app-network |
Αυτή η γραμμή – ./:/var/www/html συνδέει τον κώδικα της εφαρμογής στον κατάλογο ~/laravel-web με τον κατάλογο /var/www/html μέσα στο container. Για τη δεύτερη σύνδεση (bind mount), ένα αρχείο ρυθμίσεων για το Nginx θα δημιουργηθεί στο ~/laravel-web/nginx/conf.d/. Θα προσαρτηθεί στο /etc/nginx/conf.d/ μέσα στο container. Επομένως, μπορείτε να ενημερώσετε το αρχείο ρυθμίσεων στο κεντρικό μηχάνημα όπως απαιτείται. Θα δημιουργήσουμε το αρχείο conf του Nginx στο Βήμα 6.
Για να εμφανίζονται αυτόματα οι αλλαγές στον κώδικα μέσα στο container, συνδέουμε (bind mount) τον κώδικα της εφαρμογής στο container. Αυτό επιταχύνει τη διαδικασία ανάπτυξης. Επομένως, προσθέστε το ακόλουθο επισημασμένο απόσπασμα κώδικα στην υπηρεσία app:
|
1 2 3 4 5 6 7 8 |
#Υπηρεσία PHP app: ... volumes: - ./:/var/www/html/ - ./php/laravel.ini:/usr/local/etc/php/conf.d/laravel.ini networks: - app-network |
Η δεύτερη γραμμή συνδέει ένα αρχείο ρυθμίσεων php, το οποίο θα δημιουργήσουμε στο Βήμα 5 μέσα στο αρχείο ~/laravel-web/php/laravel.ini στο /usr/local/etc/php/conf.d/laravel.ini μέσα στο container.
Το πλήρες αρχείο Docker Compose θα πρέπει τώρα να μοιάζει με αυτό:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
version: '2.0' services: #Υπηρεσία PHP app: build: context: . dockerfile: Dockerfile image: cloudsigma.com/php container_name: app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www/html/ volumes: - ./:/var/www/html/ - ./php/laravel.ini:/usr/local/etc/php/conf.d/laravel.ini networks: - app-network #Υπηρεσία Nginx webserver: image: nginx:alpine container_name: webserver restart: unless-stopped tty: true ports: - "80:80" - "443:443" volumes: - ./:/var/www/html/ - ./nginx/conf.d/:/etc/nginx/conf.d/ networks: - app-network #Υπηρεσία MySQL db: image: mysql:5.7.32 container_name: db restart: unless-stopped tty: true ports: - "3306:3306" environment: MYSQL_DATABASE: laravel_web MYSQL_ROOT_PASSWORD: replace_mysql_root_password SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - dbdata:/var/lib/mysql/ - ./mysql/my.cnf:/etc/mysql/my.cnf networks: - app-network #Δίκτυα Docker networks: app-network: driver: bridge #Volumes volumes: dbdata: driver: local |
Αν όλα φαίνονται εντάξει, πατήστε Ctrl + O για να αποθηκεύσετε το αρχείο. Στη συνέχεια, πατήστε Ctrl + X για να βγείτε από τον επεξεργαστή. Σε αυτό το σημείο, θα πρέπει να είστε σε θέση να δημιουργήσετε μια προσαρμοσμένη εικόνα Docker για την εφαρμογή σας με το αρχείο Docker Compose.
Βήμα 4: Δημιουργία του Dockerfile
Το Dockerfile περιλαμβάνει οδηγίες τις οποίες μπορεί να χρησιμοποιήσει το Docker για να δημιουργήσει προσαρμοσμένες εικόνες Docker. Μπορεί επίσης να εγκαταστήσει το απαιτούμενο λογισμικό και να διαμορφώσει τις απαραίτητες ρυθμίσεις για την εφαρμογή σας. Αυτές καθορίζουν το περιβάλλον μέσα σε ένα container που θα φιλοξενήσει τον κώδικα της εφαρμογής σας. Μπορείτε να προωθήσετε τις εικόνες που δημιουργείτε στο docker hub για κοινή χρήση ή να τις τοποθετήσετε σε άλλα ιδιωτικά μητρώα.
Θα δημιουργήσουμε ένα Dockerfile που θα καθορίζει τις οδηγίες για τη δημιουργία του ειδώλου της εφαρμογής Laravel. Χρησιμοποιήστε το nano για να δημιουργήσετε το Dockerfile στον κατάλογο ~/laravel-web:
|
1 |
nano ~/laravel-web/Dockerfile |
Στον επεξεργαστή που άνοιξε, προσθέστε τον ακόλουθο κώδικα:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
FROM php:7.4-fpm # Αντιγραφή των composer.lock και composer.json στον κατάλογο εργασίας COPY composer.lock composer.json /var/www/html/ # Ορισμός καταλόγου εργασίας WORKDIR /var/www/html/ # Εγκατάσταση εξαρτήσεων για το λογισμικό του λειτουργικού συστήματος RUN apt-get update && apt-get install -y \ build-essential \ libpng-dev \ libjpeg62-turbo-dev \ libfreetype6-dev \ locales \ zip \ jpegoptim optipng pngquant gifsicle \ vim \ libzip-dev \ unzip \ git \ libonig-dev \ curl # Εκκαθάριση προσωρινής μνήμης RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Εγκατάσταση επεκτάσεων για την php RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl RUN docker-php-ext-configure gd --with-freetype --with-jpeg RUN docker-php-ext-install gd # Εγκατάσταση του composer (διαχειριστής πακέτων php) RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # Αντιγραφή των περιεχομένων του υπάρχοντος καταλόγου εφαρμογής στον κατάλογο εργασίας COPY . /var/www/html # Εκχώρηση δικαιωμάτων του καταλόγου εργασίας στον χρήστη www-data RUN chown -R www-data:www-data \ /var/www/html/storage \ /var/www/html/bootstrap/cache # Έκθεση της θύρας 9000 και εκκίνηση του διακομιστή php-fpm (για τον FastCGI Process Manager) EXPOSE 9000 CMD ["php-fpm"] |
Το Dockerfile δημιουργεί πρώτα ένα είδωλο βασισμένο στο php:7.4-fpm είδωλο Docker. Αυτό είναι ένα είδωλο βασισμένο στο Debian με εγκατεστημένη την υλοποίηση PHP FastCGI (PHP-FPM). Για να εκτελεστεί σωστά το Laravel, απαιτεί τη διαθεσιμότητα άλλων επεκτάσεων php όπως mcrypt, pdo_mysql, mbstring και imagick, τις οποίες εγκαθιστά το σενάριο. Στη συνέχεια εγκαθιστά τον composer διαχειριστή πακέτων php. Το κοντέινερ θα τον χρησιμοποιήσει για να εγκαταστήσει τις εξαρτήσεις php του Laravel.
Μπορείτε να χρησιμοποιήσετε την οδηγία RUN για να ορίσετε εντολές όπως εγκατάσταση, ενημέρωση και διαμόρφωση ρυθμίσεων μέσα στο κοντέινερ. Επίσης, εκχωρεί δικαιώματα χρήστη. Η οδηγία WORKDIR καθορίζει τον κατάλογο εργασίας, στην προκειμένη περίπτωση τον /var/www/html. Το σενάριο εκτελεί την εντολή CHOWN για να εκχωρήσει τα δικαιώματα του καταλόγου /var/www/html στον χρήστη www-data.
Πριν από την τελική δημιουργία του ειδώλου, πρέπει να εκτεθεί μια θύρα για να επιτραπεί η πρόσβαση στην εφαρμογή που εκτελείται μέσα στο κοντέινερ. Η εντολή EXPOSE εκθέτει μια θύρα, την 9000, για τον διακομιστή php-fpm. Η τελική εντολή προς εκτέλεση είναι η οδηγία CMD. Εκτελεί το php-fpm για να ξεκινήσει ο διακομιστής.
Μπορείτε τώρα να πατήσετε Ctrl + O για να αποθηκεύσετε το αρχείο. Στη συνέχεια, πατήστε Ctrl + X για να βγείτε από τον επεξεργαστή.
Step 5: Configure PHP
Σε αυτό το βήμα, θα διαμορφώσουμε την υπηρεσία php για να επεξεργάζεται εισερχόμενα αιτήματα από το Nginx. Θα δημιουργήσετε ένα αρχείο laravel.ini μέσα στον κατάλογο php. Αυτό το αρχείο θα περιέχει τις ρυθμίσεις παραμέτρων της PHP. Αυτό είναι το αρχείο που είχατε συνδέσει με bind-mount στο /usr/local/etc/php/conf.d/laravel.ini μέσα στο κοντέινερ στο Βήμα 3. Οι ρυθμίσεις σε αυτό το αρχείο παρακάμπτουν το προεπιλεγμένο αρχείο php.ini που συνήθως διαβάζει η PHP κατά την εκκίνησή της. Εισαγάγετε την ακόλουθη εντολή για να δημιουργήσετε τον κατάλογο php:
|
1 |
mkdir ~/laravel-web/php |
Δημιουργήστε και ανοίξτε το αρχείο laravel.ini μέσα στον κατάλογο php εισάγοντας την ακόλουθη εντολή:
|
1 |
nano ~/laravel-web/php/laravel.ini |
Το προεπιλεγμένο php.ini αρχείο έχει όριο μεταφόρτωσης ορισμένο στα 2M. Ως παράδειγμα, θα σας δείξουμε πώς να προσαρμόσετε και να ορίσετε τις ρυθμίσεις της php αλλάζοντας την τιμή του επιτρεπόμενου ορίου μεταφόρτωσης, σε περίπτωση που θέλετε να μεταφορτώσετε μεγαλύτερα αρχεία. Εισαγάγετε τις ακόλουθες γραμμές κώδικα μέσα στο αρχείο:
|
1 2 |
upload_max_filesize=80M post_max_size=80M |
Αυτό ορίζει το όριο μεταφόρτωσης και μπορείτε να μεταφορτώνετε αρχεία με συνολικό μέγεθος που δεν υπερβαίνει τα 80MB. Μπορείτε να προσθέσετε άλλες ρυθμίσεις php μέσα στο αρχείο laravel.ini για να παρακάμψετε τις προεπιλεγμένες ρυθμίσεις php. Τώρα, αποθηκεύστε και κλείστε το αρχείο.
Βήμα 6: Διαμόρφωση του Nginx
Σε αυτό το βήμα, θα διαμορφώσουμε το Nginx ώστε να χρησιμοποιεί την υπηρεσία php που ορίσαμε νωρίτερα. Θα χρησιμοποιήσει το PHP-FPM ως FastCGI server για την εξυπηρέτηση δυναμικού περιεχομένου. Ο FastCGI server είναι ένα λογισμικό που επιτρέπει σε διαδραστικά προγράμματα να επικοινωνούν με έναν διακομιστή ιστού.
Όπως είχαμε ορίσει στο αρχείο docker-compose στο Βήμα 3, θα δημιουργήσουμε το αρχείο ρυθμίσεων του Nginx app.conf μέσα στον κατάλογο ~/laravel-web/nginx/conf.d/. Πρώτα, εισαγάγετε την ακόλουθη εντολή για να δημιουργήσετε τον κατάλογο:
|
1 |
mkdir -p ~/laravel-web/nginx/conf.d |
Στη συνέχεια, δημιουργήστε και ανοίξτε το αρχείο app.conf χρησιμοποιώντας το nano εισάγοντας την ακόλουθη εντολή:
|
1 |
nano ~/laravel-web/nginx/conf.d/app.conf |
Προσθέστε τον ακόλουθο κώδικα ρυθμίσεων Nginx στο αρχείο:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
server { listen 80; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/html/public; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } } |
Το Nginx διαβάζει αρχεία ρυθμίσεων που ονομάζονται server blocks για να γνωρίζει ποιος κατάλογος πρέπει να εξυπηρετείται σε έναν επισκέκτη του ιστότοπου με βάση τη διεύθυνση URL. Για να μάθετε περισσότερα, διαβάστε σχετικά με τη ρύθμιση των server blocks στον οδηγό μας για την εγκατάσταση του Nginx στο Ubuntu 18.04. Οι οδηγίες που ορίζονται εξυπηρετούν τους ακόλουθους σκοπούς:
- listen – Ορίζει τη θύρα στην οποία ο διακομιστής θα ακούει για εισερχόμενα αιτήματα, η οποία είναι συνήθως η θύρα 80.
- error_log & access_log – Ορίζει τα αρχεία για την εγγραφή των αρχείων καταγραφής της εφαρμογής.
- root – Ορίζει τη διαδρομή webroot, τον κατάλογο που θα εξυπηρετεί οποιοδήποτε αίτημα υποβάλλεται στον διακομιστή από το διαδίκτυο.
Στο μπλοκ location για την php, η οδηγία fastcgi_pass καθορίζει ότι η υπηρεσία app ακούει σε μια υποδοχή TCP στη θύρα 9000 (η οποία ορίστηκε στο Dockerfile). Αυτό κατευθύνει τον διακομιστή PHP-FPM να ακούει μέσω του δικτύου και όχι σε μια υποδοχή Unix. Αν και μια υποδοχή Unix μπορεί να έχει ένα μικρό πλεονέκτημα ταχύτητας έναντι μιας υποδοχής TCP, στερείται πρωτοκόλλου δικτύου, παρακάμπτοντας έτσι τη στοίβα δικτύου.
Ένα Unix socket θα ήταν πιο κατάλληλο για σενάρια όπου οι κεντρικοί υπολογιστές βρίσκονται στο ίδιο μηχάνημα. Ωστόσο, εάν έχετε υπηρεσίες που εκτελούνται σε διαφορετικούς κεντρικούς υπολογιστές, ένα TCP socket έχει το πλεονέκτημα της σύνδεσης υπηρεσιών που είναι κατανεμημένες. Στη δική μας περίπτωση, το κοντέινερ της εφαρμογής εκτελείται σε διαφορετικό κεντρικό υπολογιστή από το κοντέινερ του διακομιστή ιστού μας. Επομένως, ένα TCP socket είναι το πλέον κατάλληλο για τη διαμόρφωσή μας.
Μπορείτε τώρα να πατήσετε Ctrl + O για να αποθηκεύσετε το αρχείο, και στη συνέχεια να πατήσετε Ctrl + X για να βγείτε από τον επεξεργαστή. Οι αλλαγές που έγιναν στον κατάλογο nginx/conf.d/ θα αντικατοπτριστούν αυτόματα στο κοντέινερ του διακομιστή ιστού χάρη στο bind mount που προσθέσατε στο αρχείο Docker Compose στο Βήμα 3.
Βήμα 7: Διαμόρφωση της MySQL
Αφού διαμορφώσαμε το Nginx ώστε να λειτουργεί με την PHP, μπορούμε τώρα να διαμορφώσουμε τη MySQL για την αποθήκευση και την παροχή δυναμικών δεδομένων στην PHP. Είχαμε ήδη ορίσει στο αρχείο Docker Compose την εγκατάσταση των απαραίτητων επεκτάσεων για την επικοινωνία PHP και MySQL. Θα δημιουργήσουμε το αρχείο διαμόρφωσης της MySQL my.cnf μέσα στον φάκελο mysql, το οποίο θα συνδεθεί μέσω bind-mount στο /etc/mysql/my.cnf όπως είχαμε ορίσει στην ενότητα της υπηρεσίας db του Docker Compose στο Βήμα 3.
Οι ρυθμίσεις διαμόρφωσης και οι αλλαγές της MySQL μπορούν να γίνουν στο αρχείο my.cnf όποτε θέλετε. Θα πρέπει να αντικατοπτρίζονται αμέσως μέσα στο κοντέινερ. Αρχικά, δημιουργήστε τον κατάλογο εισάγοντας την ακόλουθη εντολή:
|
1 |
mkdir ~/laravel-web/mysql |
Στη συνέχεια, δημιουργήστε και ανοίξτε το nano εισάγοντας την ακόλουθη εντολή:
|
1 |
nano ~/laravel-web/mysql/my.cnf |
Εισαγάγετε το ακόλουθο απόσπασμα κώδικα για να ενεργοποιήσετε το αρχείο καταγραφής ερωτημάτων και να καθορίσετε τη θέση του αρχείου καταγραφής ερωτημάτων:
|
1 2 3 |
[mysqld] general_log = 1 general_log_file = /var/lib/mysql/general.log |
Ορίζοντας την ιδιότητα general_log ως 1, επιτρέπετε τα γενικά αρχεία καταγραφής. Η ιδιότητα general_log_file καθορίζει τη θέση του αρχείου καταγραφής. Πατήστε Ctrl + O για να αποθηκεύσετε το αρχείο, και στη συνέχεια πατήστε Ctrl + X για να βγείτε από τον επεξεργαστή.
Βήμα 8: Ορισμός μεταβλητών περιβάλλοντος Laravel
Μέχρι αυτό το σημείο, όλες οι υπηρεσίες και οι ρυθμίσεις διαμόρφωσης έχουν ολοκληρωθεί. Έτσι, θα μπορούσαμε να αναπτύξουμε τα κοντέινερ μας. Ωστόσο, υπάρχει ένα σημαντικό βήμα που πρέπει να ολοκληρωθεί προτού η διαδικτυακή μας εφαρμογή είναι πραγματικά χρησιμοποιήσιμη – οι μεταβλητές περιβάλλοντος. Το πλαίσιο Laravel αναμένει ένα αρχείο με όνομα .env το οποίο χρησιμοποιεί για να ορίσει το περιβάλλον του. Από προεπιλογή, το Laravel συνοδεύεται από το .env.example το οποίο μπορείτε να αντιγράψετε στο .env και στη συνέχεια να τροποποιήσετε τις μεταβλητές με τα πραγματικά σας στοιχεία. Εισαγάγετε την ακόλουθη εντολή για να αντιγράψετε το αρχείο:
|
1 |
cp .env.example .env |
Μόλις αντιγραφεί, ανοίξτε το αρχείο χρησιμοποιώντας το nano για να το τροποποιήσετε:
|
1 |
nano .env |
Ακολουθεί ένα στιγμιότυπο οθόνης για το πώς μπορεί να μοιάζει το αρχείο:

Στο αρχείο, το επόμενο βήμα είναι να τροποποιήσετε τις μεταβλητές κάτω από το μπλοκ DB_CONNECTION, όπως τις είχατε ορίσει στις προηγούμενες διαμορφώσεις που κάναμε μέχρι τώρα. Ενημερώστε ως εξής:
- DB_HOST είναι το db κοντέινερ βάσης δεδομένων.
- DB_DATABASE είναι το laravel_web.
- DB_USERNAME είναι το όνομα χρήστη για τη βάση δεδομένων. Επιλέξτε ένα όνομα της επιλογής σας, αλλά για χάρη αυτού του οδηγού, ας χρησιμοποιήσουμε το laraveldocker.
- DB_PASSWORD είναι ένας ισχυρός κωδικός πρόσβασης που θα χρησιμοποιήσει ο παραπάνω χρήστης σας για να συνδεθεί στη βάση δεδομένων, επομένως επιλέξτε έναν ισχυρό κωδικό πρόσβασης. Στο Βήμα 10, θα δημιουργήσουμε αυτόν τον χρήστη με τον κωδικό πρόσβασης που θα επιλέξετε εδώ.
Με τις τιμές ενημερωμένες, το DB_CONNECTION θα πρέπει τώρα να μοιάζει κάπως έτσι:

Αποθηκεύστε και κλείστε το αρχείο.
Βήμα 9: Εκτέλεση των Docker Containers
Σε αυτό το στάδιο, όλες οι υπηρεσίες και οι διαμορφώσεις σας ορίζονται στο αρχείο Docker Compose. Απαιτείται μόνο μία εντολή για να ξεκινήσουν όλα τα κοντέινερ, να δημιουργηθούν οι τόμοι, να συνδεθούν τα δίκτυα και να ρυθμιστεί και να δημιουργηθεί η εφαρμογή σας. Εισαγάγετε την ακόλουθη εντολή στο τερματικό σας:
|
1 |
docker-compose up -d |
Όταν εκτελείτε την εντολή docker-compose up για πρώτη φορά, λαμβάνει όλες τις απαραίτητες εικόνες Docker. Εάν ρυθμίζετε την υποδομή στον τοπικό σας υπολογιστή, ενδέχεται να χρειαστεί λίγος χρόνος για να ολοκληρωθεί. Μόλις ληφθούν οι εικόνες, το Compose δημιουργεί τα κοντέινερ. Η σημαία -d καθοδηγεί το Docker να εκτελέσει τα κοντέινερ στο παρασκήνιο. Εάν η διαδικασία ολοκληρωθεί με επιτυχία, θα πρέπει να μπορείτε να δείτε κάτι σαν αυτό στο τερματικό σας:

Εισαγάγετε την ακόλουθη εντολή στο τερματικό σας για να δείτε τη λίστα με όλα τα εκτελούμενα κοντέινερ:
|
1 |
docker ps |
Θα πρέπει να εμφανίσει κάτι σαν το παρακάτω στιγμιότυπο οθόνης, με λεπτομέρειες σχετικά με τα κοντέινερ app, webserver και db:

- CONTAINER ID – Ένα μοναδικό αναγνωριστικό για κάθε κοντέινερ.
- NAMES – Το όνομα της υπηρεσίας που σχετίζεται με κάθε κοντέινερ, όπως ορίζεται στο αρχείο Docker Compose. (Μπορείτε να χρησιμοποιήσετε είτε το αναγνωριστικό είτε το όνομα του κοντέινερ για να αποκτήσετε πρόσβαση σε αυτό).
- IMAGE – Το όνομα της εικόνας για κάθε κοντέινερ.
- STATUS – Εμφανίζει πληροφορίες σχετικά με την κατάσταση του κοντέινερ (μπορεί να είναι σταματημένο, σε εκτέλεση ή σε επανεκκίνηση).
- PORTS – Δείχνει τις θύρες που εκθέτει ένα κοντέινερ.
Το Docker Compose παρέχει μια εντολή που ονομάζεται exec, την οποία μπορείτε να χρησιμοποιήσετε για να εκτελέσετε εντολές τερματικού ή να αποκτήσετε πρόσβαση στη γραμμή εντολών μέσα σε ένα κοντέινερ. Αρχικά θέλουμε να εκτελέσουμε μερικές εντολές μέσα στο κοντέινερ app, το οποίο είναι το κοντέινερ που εκτελεί την εφαρμογή Laravel.
Το Docker παρέχει μια εντολή για πρόσβαση στη γραμμή εντολών ενός κοντέινερ. Η σύνταξή της είναι η εξής: docker-compose exec container_name bash. Για να αποκτήσετε πρόσβαση στη γραμμή εντολών του κοντέινερ app, εισαγάγετε την ακόλουθη εντολή:
|
1 |
docker-compose exec app bash |
Μόλις βρεθείτε στη γραμμή εντολών του κοντέινερ, μπορείτε να εκτελέσετε ορισμένες εντολές ρύθμισης παραμέτρων Laravel Artisan. Εισαγάγετε την ακόλουθη εντολή για να δημιουργήσετε το κλειδί laravel και να το αποθηκεύσετε στο αρχείο .env:
|
1 |
php artisan key:generate |
Με το κλειδί περιβάλλοντος ορισμένο, μπορείτε να εκτελέσετε την ακόλουθη εντολή για να αποθηκεύσετε στη μνήμη cache τις ρυθμίσεις παραμέτρων:
|
1 |
php artisan config:cache |
Οι ρυθμίσεις παραμέτρων αποθηκεύονται στο αρχείο /var/www/html/bootstrap/cache/config.php μέσα στο κοντέινερ. Μπορείτε να πατήσετε Ctrl + D για να βγείτε από το τερματικό του κοντέινερ.
Για να επιβεβαιώσετε ότι η εφαρμογή Laravel έχει αναπτυχθεί και εκτελείται, επισκεφτείτε τη δημόσια IP του διακομιστή σας στο πρόγραμμα περιήγησής σας (http://your_server_public_ip). Θα πρέπει να δείτε τη σελίδα καλωσορίσματος για μια νέα εγκατάσταση Laravel:

Step 10: Configure a MySQL user
Σε αυτό το βήμα, θα δημιουργήσουμε έναν χρήστη βάσης δεδομένων για τη βάση δεδομένων MySQL laravel_web που καθορίσαμε στο αρχείο docker-compose. Όταν εκτελέσατε την εντολή δημιουργίας κοντέινερ στο Step 9, η MySQL εγκαταστάθηκε, αλλά δημιούργησε μόνο έναν προεπιλεγμένο διαχειριστικό λογαριασμό root, ο οποίος τυχαίνει να έχει απεριόριστα προνόμια στη βάση δεδομένων. Για να αποφύγουμε τη χρήση του χρήστη root, θα δημιουργήσουμε έναν αποκλειστικό χρήστη, τον laraveldocker, για χρήση στην εφαρμογή. Αυτός είναι ο χρήστης που καθορίσατε στις μεταβλητές περιβάλλοντος στο Step 8. Αποκτήστε πρόσβαση στη γραμμή εντολών μέσα στο τερματικό εισάγοντας την ακόλουθη εντολή:
|
1 |
docker-compose exec db bash |
Μόλις βρεθείτε μέσα στο κοντέινερ, συνδεθείτε στη MySQL εισάγοντας την ακόλουθη εντολή:
|
1 |
mysql -u root -p |
Στο πλαίσιο προτροπής για τον κωδικό πρόσβασης, εισαγάγετε τον κωδικό πρόσβασης που ορίσατε στην υπηρεσία db στο αρχείο docker-compose στο Step 2.
Αφού συνδεθείτε στην προτροπή της MySQL, ελέγξτε αν μπορείτε να δείτε τη βάση δεδομένων που καθορίσατε στο αρχείο docker-compose εισάγοντας την ακόλουθη εντολή SQL:
|
1 |
show databases; |
Θα πρέπει να δείτε τη βάση δεδομένων laravel_web, ή οποιοδήποτε όνομα έχετε καθορίσει για τη δική σας εγκατάσταση:

Στη συνέχεια, δημιουργούμε έναν χρήστη και έναν κωδικό πρόσβασης για τη βάση δεδομένων laravel_web. Αυτά πρέπει να είναι τα ίδια στοιχεία που καθορίσατε στο αρχείο .env στο Step 8. Εισαγάγετε την ακόλουθη εντολή για να δημιουργήσετε χρήστη και κωδικό πρόσβασης και να εκχωρήσετε όλα τα προνόμια σε αυτόν τον χρήστη:
|
1 |
GRANT ALL ON laravel_web.* TO 'laraveldocker'@'%' IDENTIFIED BY 'your_strong_laravel_docker_password'; |
Για να εφαρμοστούν οι αλλαγές αμέσως, εισαγάγετε την ακόλουθη εντολή για να εκκαθαρίσετε τα δικαιώματα:
|
1 |
FLUSH PRIVILEGES; |
Αυτό ολοκληρώνει τη ρύθμιση παραμέτρων του χρήστη MySQL. Εξέλθετε από τη γραμμή εντολών της MySQL πληκτρολογώντας exit και πατώντας enter. Τέλος, εξέλθετε από το db container πατώντας Ctrl + D.
Βήμα 11: Δοκιμή της επικοινωνίας μεταξύ του κώδικα της εφαρμογής Laravel και της βάσης δεδομένων MySQL
Μέχρι αυτό το βήμα, όλα έχουν λειτουργήσει καλά. Ωστόσο, θέλουμε να επιβεβαιώσουμε ότι ο κώδικας Laravel στο app container μπορεί να επικοινωνήσει με τη βάση δεδομένων MySQL στο db container. Αρχικά, αποκτήστε πρόσβαση στο τερματικό του app container εισάγοντας την ακόλουθη εντολή:
|
1 |
docker-compose exec app bash |
Στη συνέχεια, πρέπει να εκτελέσετε την laravel migration εντολή που δημιουργεί τους πίνακες:
|
1 |
php artisan migrate |
Θα πρέπει να δείτε τη διαδικασία migration στο τερματικό σας καθώς το Laravel δημιουργεί τους προεπιλεγμένους πίνακες:

Στη συνέχεια, θα δοκιμάσουμε αν μπορούμε να έχουμε πρόσβαση στη βάση δεδομένων από το Laravel. Το Laravel συνοδεύεται από το Tinker από προεπιλογή, το οποίο σας επιτρέπει να αλληλεπιδράτε με ολόκληρη την εφαρμογή από τη γραμμή εντολών, συμπεριλαμβανομένης της πρόσβασης στη βάση δεδομένων, της εκτέλεσης εργασιών, eloquent ORM, και πολλά άλλα. Μπορούμε να χρησιμοποιήσουμε το Tinker για να δούμε τα δεδομένα στον πίνακα migrations. Εισαγάγετε την ακόλουθη εντολή για να αποκτήσετε πρόσβαση στο Tinker:
|
1 |
php artisan tinker |
Μόλις βρεθείτε στη γραμμή εντολών του Tinker, μπορείτε να δείτε τη λίστα με τους πίνακες που δημιουργήθηκαν από την εντολή migrate εισάγοντας τα εξής:
|
1 |
\DB::select('show tables'); |
Το παρακάτω στιγμιότυπο οθόνης δείχνει το αποτέλεσμα, το οποίο είναι οι πίνακες που βρίσκονται αυτή τη στιγμή στη βάση δεδομένων laravel_web:

Μπορείτε να ανακτήσετε τα δεδομένα ενός πίνακα καθορίζοντας το όνομα του πίνακα. Για παράδειγμα, μπορείτε να ανακτήσετε τα δεδομένα στον πίνακα migrations εισάγοντας την ακόλουθη εντολή:
|
1 |
\DB::table('migrations')->get(); |
Η εντολή παράγει το ακόλουθο αποτέλεσμα:

Από το παραπάνω αποτέλεσμα, η εφαρμογή Laravel είναι σωστά ρυθμισμένη και μπορεί να επικοινωνήσει με τη βάση δεδομένων. Μπορείτε να πειραματιστείτε με περισσότερες εντολές, όπως η δημιουργία μοντέλων, η εκτέλεση εργασιών και άλλα. Μπορείτε να εξέλθετε από τη γραμμή εντολών του Tinker πατώντας Ctrl + D.
Συμπέρασμα
Σε αυτόν τον οδηγό, αναπτύξατε μια εφαρμογή Laravel με LEMP stack μέσα σε ένα Docker container. Δοκιμάσατε την εφαρμογή αποκτώντας πρόσβαση στη διεπαφή ιστού καθώς και συνδεόμενοι στη βάση δεδομένων μέσω του Laravel Tinker. Είχατε την ευκαιρία να γνωρίσετε τη δύναμη του Docker Compose. Σας επιτρέπει να δημιουργήσετε μια ομάδα από Docker containers που ορίζονται σε ένα αρχείο, τα οποία στη συνέχεια μπορούν να εκτελεστούν με μία μόνο εντολή.
Αν θέλετε να εξοικειωθείτε περισσότερο με τα containers, ρίξτε μια ματιά στον οδηγό μας που σας δείχνει πώς να καθαρίσετε τους πόρους του Docker – images, containers και volumes και στην λεπτομερή επισκόπησή μας για το εργαλείο Kubernetes.
Μπορείτε επίσης να επισκεφθείτε το ιστολόγιό μας για περισσότερα σχετικά με το Docker και το Continuous Integration και Continuous Deployment.
Καλή συνέχεια!
Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.