Docker είναι μια δωρεάν και ανοιχτού κώδικα λύση για την ανάπτυξη, την υλοποίηση και τη διαχείριση εφαρμογών σε ελαφριά εικονικοποίηση επιπέδου λειτουργικού συστήματος. Σε αυτόν τον οδηγό, θα δείξουμε πώς να δημιουργήσετε μια εφαρμογή Python μέσα σε ένα Docker container.
Προαπαιτούμενα
Για να εκτελέσετε τα βήματα που παρουσιάζονται σε αυτόν τον οδηγό, θα χρειαστείτε τα ακόλουθα στοιχεία:
Ένα σύστημα Linux. Δείτε πώς να διαμορφώσετε το δικό σας Ubuntu VPS στο CloudSigma.
Η πιο πρόσφατη έκδοση του Docker είναι εγκατεστημένη και διαμορφωμένη. Μάθετε περισσότερα σχετικά με την εγκατάσταση του Docker στο Ubuntu.
Docker Containers
Όταν εκτελούνται διάφορα προγράμματα μέσα στο ίδιο περιβάλλον, τα πράγματα μπορούν (και θα) χαλάσουν. Όσο περισσότερα προγράμματα προσθέτετε, τόσο πιο ασταθές γίνεται το σύστημα. Αυτό μπορεί να μην είναι σημαντικό για τον μέσο χρήστη. Ωστόσο, όταν πρόκειται για κρίσιμες εφαρμογές, μπορεί να υπάρξουν σοβαρές συνέπειες.
Όσο περισσότερες εφαρμογές εισάγονται στο σύστημα, τόσο μεγαλύτερη είναι η επιφάνεια επίθεσης. Μία μόνο παραβιασμένη εφαρμογή μπορεί εύκολα να οδηγήσει στην κατάρρευση ολόκληρου του συστήματος.
Για να λύσουμε αυτά τα ζητήματα, μπορούμε να χρησιμοποιήσουμε Docker containers για sandboxing σε επίπεδο λογισμικού:
Οι εφαρμογές μέσα στο container θα έχουν περιορισμένη πρόσβαση στα αρχεία.
Οι containerized εφαρμογές δεν μπορούν να δουν άλλες διεργασίες που εκτελούνται στο σύστημα.
Στο container μπορεί να εκχωρηθεί συγκεκριμένη ποσότητα πόρων υλικού.
Οι θύρες δικτύου ενός container δεν εκτίθενται προς τα έξω.
Συνεπής συσκευασία σχεδόν οτιδήποτε μεταξύ τοπικών περιβαλλόντων και περιβαλλόντων παραγωγής.
Για επίδειξη, θα δημιουργήσουμε έναν απλό Python server μέσα σε ένα Docker container, θα μετατρέψουμε το container σε image και θα αναπτύξουμε το image μέσα σε ένα εικονικό περιβάλλον παραγωγής.
Βήμα 1 – Διαμόρφωση Συστήματος Αρχείων
Για να φιλοξενήσουμε το project, πρώτα θα δημιουργήσουμε έναν αποκλειστικό κατάλογο:
mkdir -pv python-server-container/
cd !$
Μέσα στον κατάλογο, δημιουργήστε έναν υποκατάλογο src για να αποθηκεύσουμε τον κώδικά μας:
mkdir -pv src/

Βήμα 2 – Δημιουργία του Python Server
Σε αυτό το βήμα, θα δημιουργήσουμε έναν απλό HTTP server σε Python. Δημιουργήστε το αρχείο server.py:
touch server.py
Ανοίξτε το σε έναν επεξεργαστή κειμένου:
nano server.py

Εισαγάγετε τον ακόλουθο κώδικα Python:
from http.server import HTTPServer, SimpleHTTPRequestHandler
def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
"""server entrypoint"""
server_address = ("0.0.0.0", 8080)
httpd = server_class(server_address, handler_class)
print("starting server...")
httpd.serve_forever()
if __name__ == "__main__":
run()
Εδώ:
Χρησιμοποιούμε την κλάση
HTTPServerκαι ζητάμε έναν handler από την τυπική βιβλιοθήκη της Python, διατηρώντας το πρόγραμμα απλό.Η συνάρτηση run αρχικοποιεί ένα instance του
HTTPserver.Όπως υποδηλώνουν τα ορίσματα του
server_address, ο server θα ακούει οποιαδήποτε εισερχόμενη σύνδεση στη θύρα 8080.
Τώρα, θα επαληθεύσουμε ότι ο server λειτουργεί όπως αναμένεται. Εκκινήστε τον server:
python3 server.py
![]()
Από ένα νέο terminal, μπορούμε να χρησιμοποιήσουμε το curl για να στείλουμε ένα αίτημα στον server:
curl -iv localhost:8080

Εναλλακτικά, μπορείτε να ανοίξετε τον σύνδεσμο σε έναν web browser:
http://localhost:8080

Βήμα 3 – Δημιουργία Dockerfile
Ένα Dockerfile περιέχει τις απαραίτητες οδηγίες για τη δημιουργία ενός Docker image. Οι οδηγίες στο αρχείο ακολουθούνται διαδοχικά. Μάθετε περισσότερα σχετικά με το Dockerfile.
Δημιουργήστε ένα νέο Dockerfile για το project μας:
touch Dockerfile
Τώρα, θα εισαγάγουμε τον απαραίτητο κώδικα σε αυτό. Ανοίξτε το σε έναν επεξεργαστή κειμένου:
nano Dockerfile
Εισαγάγετε τον ακόλουθο κώδικα:
FROM python:latest
ENV SRC_DIR /usr/bin/src/test_server/src
COPY src/* ${SRC_DIR}/
WORKDIR ${SRC_DIR}
ENV PYTHONUNBUFFERED=1
CMD ["python", "server.py"]Εδώ:
Κάθε
Dockerfileπρέπει να ξεκινά με την οδηγίαFROM. Στην περίπτωσή μας, δηλώνουμε την Python ως τη βάση του Docker image.Η οδηγία
ENV SRC_DIRκαθορίζει την τοποθεσία του καταλόγου του container.Η οδηγία
COPYαντιγράφει τα αρχεία από τον κατάλογοsrcπου φιλοξενεί αυτήν τη στιγμή τον Python server.Η μεταβλητή
PYTHONBUFFERED=1καθορίζει ότι η Python θα εκτυπώνει και θα καταγράφει την έξοδο απευθείας στοSTDOUT. Διαφορετικά, τα logs δεν θα αποστέλλονταν σε κάποιο buffer.Η οδηγία
CMDκαθορίζει μια προεπιλεγμένη εντολή που θα εκτελείται κατά την εκτέλεση του container. Σε αυτήν την περίπτωση, χρησιμοποιούμε την οδηγία για να εκκινήσουμε τον Python server μας.
Βήμα 4 – Δημιουργία Docker Image
Με το Dockerfile έτοιμο, μπορούμε τώρα να δημιουργήσουμε ένα image. Εκτελέστε την ακόλουθη εντολή Docker για να ξεκινήσετε τη διαδικασία:
docker build . -t python_server

Εδώ:
Το flag
-tχρησιμοποιείται για να προσθέσουμε tag στο Docker image μας ωςpython_server.Το Docker θα κατεβάσει όλα τα απαραίτητα στοιχεία και θα τα συνδυάσει σε ένα image.
Βήμα 5 – Εκτέλεση του Image
Το image είναι έτοιμο για ανάπτυξη. Μπορούμε να το εκτελέσουμε χρησιμοποιώντας την ακόλουθη εντολή:
docker run -p 8080:8080 python_server

Εδώ, προωθούμε τη θύρα 8080 από το τοπικό μηχάνημα στο Docker image χρησιμοποιώντας το flag -p.
Μπορούμε εύκολα να επαληθεύσουμε αν ο server είναι ενεργός και εκτελείται χρησιμοποιώντας το curl:
curl -iv localhost:8080


Βήμα 6 – Τερματισμός του Server
Από το terminal, πατήστε “Ctrl + C” για να τερματίσετε τη διεργασία Docker:

Βήμα 7 – Εξαγωγή και Εισαγωγή του Docker Image
Έχουμε πλέον ένα λειτουργικό Docker image που φιλοξενεί τον Python server μας. Με τη βοήθεια των λειτουργιών εξαγωγής και εισαγωγής του Docker, μπορούμε να το μεταφέρουμε σε οποιοδήποτε άλλο σύστημα.
Πρώτα, ελέγξτε τη λίστα των Docker images στο τρέχον σύστημα:
docker images

Ο στόχος μας είναι το Docker image python_server που μόλις δημιουργήσαμε. Η ακόλουθη εντολή θα το εξαγάγει ως αρχείο TAR:
docker save python_server:latest > python_server.tar

Μετά τη μεταφορά του αρχείου python_server.tar στο μηχάνημα προορισμού, χρησιμοποιήστε την ακόλουθη εντολή για να εισαγάγετε το Docker image:
docker load < python_server.tar

Τελικές Σκέψεις
Σε αυτόν τον οδηγό, δείξαμε πώς να δημιουργήσετε ένα Docker image από μια εφαρμογή Python. Δημιουργήσαμε έναν απλό Python webserver και φτιάξαμε ένα Docker image από αυτόν. Το Docker image μπορεί πλέον να αναπτυχθεί σε οποιοδήποτε περιβάλλον και να αναμένεται συνεπής συμπεριφορά.
Σας ενδιαφέρει να μάθετε περισσότερα για το Docker; Δείτε τους ακόλουθους οδηγούς:
Δημιουργία και ανάπτυξη μιας εφαρμογής Flask με Docker στο Ubuntu 20.04
Πώς να ασφαλίσετε και να κλιμακώσετε μια εφαρμογή Django με Docker, Nginx και Let’s Encrypt
Πώς να αναπτύξετε το WordPress με Docker Containers στο Ubuntu 20.04
Happy Computing!

Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.