← Back to blog

Containerize Μια Εφαρμογή Python με Docker

Category
Containerize Μια Εφαρμογή Python με Docker

Docker είναι μια δωρεάν και ανοιχτού κώδικα λύση για την ανάπτυξη, την υλοποίηση και τη διαχείριση εφαρμογών σε ελαφριά εικονικοποίηση επιπέδου λειτουργικού συστήματος. Σε αυτόν τον οδηγό, θα δείξουμε πώς να δημιουργήσετε μια εφαρμογή Python μέσα σε ένα Docker container.

Προαπαιτούμενα

Για να εκτελέσετε τα βήματα που παρουσιάζονται σε αυτόν τον οδηγό, θα χρειαστείτε τα ακόλουθα στοιχεία:

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; Δείτε τους ακόλουθους οδηγούς:

Happy Computing!

Preslav Dobrev

Συγγραφέας · CloudSigma

Σχόλια

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