Podman vs Docker: Ποιο να διαλέξω;

Αν είστε στον κόσμο της εικονικοποίησης και του κοντέινερ, πιθανότατα έχετε συναντήσει το Podman και το Docker και ίσως αναρωτιέστε πώς διαφέρουν μεταξύ τους.

Σε αυτήν την ανάρτηση, θα εξερευνήσουμε τις διαφορές μεταξύ του Docker και του Podman και θα προσπαθήσουμε να βρούμε ποιο θα είναι η σωστή επιλογή για εσάς!

Λιμενεργάτης

Το Docker είναι μια τεχνολογία κοντέινερ που διευκολύνει τη διαχείριση εξαρτήσεων σε ένα έργο σε όλα τα επίπεδα (ανάπτυξη και ανάπτυξη).

Διαθέσιμος σε Linux, Windows και Mac OS, ο μηχανισμός του Docker επικεντρώνεται γύρω από τα κοντέινερ και την ενορχήστρωσή τους, και σε αυτό το σημείο διαφέρει η δημιουργία κοντέινερ από την εικονικοποίηση.

Το Docker έχει δύο βασικά δομικά στοιχεία: το Docker CLI και το Docker Daemon.

Docker Daemon:

Είναι μια συνεχής διαδικασία παρασκηνίου που βοηθά στη διαχείριση εικόνων Docker, κοντέινερ, δικτύων και όγκων αποθήκευσης. Το Docker χρησιμοποιεί το Docker Engine REST API για να αλληλεπιδράσει με τον δαίμονα Docker, στον οποίο έχει πρόσβαση μέσω πρωτοκόλλου HTTP.

Docker CLI:

Πίστωση εικόνας: Redhat

Είναι ο πελάτης γραμμής εντολών Docker για αλληλεπίδραση με τον δαίμονα Docker. Είναι αυτό που χρησιμοποιείτε όταν εκτελείτε οποιαδήποτε εντολή Docker.

Η λειτουργία του Docker βασίζεται στον πυρήνα του Linux και στις λειτουργίες αυτού του πυρήνα, όπως cgroups και namespaces. Αυτές οι λειτουργίες διαχωρίζουν τις διεργασίες έτσι ώστε να μπορούν να εκτελούνται ανεξάρτητα, καθώς ο σκοπός των κοντέινερ είναι να εκτελούν πολλαπλές διεργασίες και εφαρμογές ξεχωριστά.

Αυτό είναι που καθιστά δυνατή τη βελτιστοποίηση της χρήσης της υποδομής χωρίς να μειώνεται το επίπεδο ασφάλειας σε σύγκριση με τα επιμέρους συστήματα.

Όλα τα εργαλεία κοντέινερ όπως το Docker συνοδεύονται από ένα μοντέλο ανάπτυξης που βασίζεται σε εικόνα. Αυτό το μοντέλο απλοποιεί την κοινή χρήση μιας εφαρμογής ή ενός συνόλου υπηρεσιών σε πολλά περιβάλλοντα.

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

Podman

Το Podman (το POD MANager ) δημιουργεί, εκτελεί και διαχειρίζεται κοντέινερ και εικόνες κοντέινερ OCI. Αναπτύχθηκε από την Red Hat και προοριζόταν αρχικά για την επιχείρησή της Linux 8. Χρησιμοποιείται για τη διαχείριση κοντέινερ και λειτουργεί ως ο επίσημος διάδοχος του Docker.

Η Red Hat κατά συνέπεια διέκοψε την υποστήριξη για το Docker, αλλά διαβεβαίωσε ότι η αλλαγή θα ήταν εύκολη για τους χρήστες, καθώς το Podman βασίζεται στο Docker, αν και αρχικά προοριζόταν μόνο ως εργαλείο εντοπισμού σφαλμάτων.

  Τα CD που γράψατε πάνε άσχημα: Δείτε τι πρέπει να κάνετε

Διαχειρίζεται ολόκληρο το οικοσύστημα κοντέινερ χρησιμοποιώντας τη βιβλιοθήκη libpod. Δεδομένου ότι το Podman λειτουργεί μόνο σε πλατφόρμες Linux, ένα REST API και πελάτες βρίσκονται σε εξέλιξη για να επιτρέψουν στα συστήματα Mac και Windows να καλούν την υπηρεσία.

Ωστόσο, υπάρχει επί του παρόντος ένας απομακρυσμένος πελάτης βασισμένος σε Varlink που λειτουργεί σε πλατφόρμες Mac ή Windows που επιτρέπει την απομακρυσμένη επικοινωνία με έναν διακομιστή Podman που βασίζεται σε Linux. Η βιβλιοθήκη libpod υποστηρίζει πολλαπλές μεθόδους για την ασφαλή μεταφόρτωση εικόνων, συμπεριλαμβανομένης της εμπιστοσύνης και της επαλήθευσης εικόνας.

Υποστηρίζει επίσης pods για τη διαχείριση ομάδων κοντέινερ μαζί και πολλαπλών μορφών εικόνας, συμπεριλαμβανομένων των μορφών εικόνας OCI και Docker.

Σε πολύ μικρά και διαχειρίσιμα περιβάλλοντα, το Podman μπορεί ακόμη και να χρησιμεύσει ως πρόδρομος του Kubernetes. Γεφυρώνει το χάσμα μεταξύ της μοναδικής διαχείρισης μεμονωμένων περιπτώσεων από τα πρώτα χρόνια της διαφημιστικής εκστρατείας κοντέινερ και της σύγχρονης ενορχήστρωσης με τον Kubernetes.

Οι φιλόδοξοι χρήστες κοντέινερ μπορούν ήδη να απολαύσουν το επόμενο επίπεδο με τα pods. Η κατασκευή και η λειτουργία ενός συμπλέγματος Kubernetes δεν είναι πλέον απαραίτητες. Στην απλούστερη περίπτωση, τα νεοσχεδιασμένα pods μπορούν να δοκιμαστούν και να βελτιωθούν σε μεμονωμένες λειτουργίες. Ακόμη και μια μεταγενέστερη μεταγραφή στην Kubernetes είναι πιθανή.

Η εντολή podman generate kube παρέχει τα αντίστοιχα αρχεία διαμόρφωσης. Στη συνέχεια, χρησιμεύουν ένα προς ένα ως είσοδος για το εργαλείο Kubernetes kubectl.

Οι τρέχουσες εκδόσεις του Podman μπορούν ακόμη και να δημιουργήσουν αρχεία διαμόρφωσης για το systemd – μια απόλαυση για όποιον χρησιμοποιεί τον πανταχού παρόν διάδοχο init για ενορχήστρωση κοντέινερ.

Podman vs Docker: Differences

Ο Docker γρήγορα καθιερώθηκε ως το χόμπι για τη διαχείριση εμπορευματοκιβωτίων. Ωστόσο, το Docker έχει πολλά πλεονεκτήματα και, κυρίως, το ταχέως αναπτυσσόμενο ρεπερτόριο εικόνων, καθώς και μειονεκτήματα και πιθανούς κινδύνους ασφαλείας. Επιπλέον, το Docker δεν υποστηρίζεται πλέον ως κοντέινερ για το Kubernetes.

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

Επιτρέπει στις διεργασίες που εκτελούνται στα κοντέινερ να έχουν πρόσβαση στον πυρήνα με δικαιώματα ρίζας και έτσι να επιτίθενται στο κεντρικό σύστημα.

Η πρώτη διάκριση είναι εμφανής όταν το χρησιμοποιείτε για πρώτη φορά. Ενώ το Docker απαιτεί να ξεκινήσει πρώτα ο δαίμονας Docker, ένα κοντέινερ Podman μπορεί να ξεκινήσει απευθείας από τη γραμμή εντολών. Επομένως, δεν υπάρχει διαδικασία παρασκηνίου και η εφαρμογή εκτελείται μόνο όταν χρειάζεται.

  Πώς να διορθώσετε "Ένα σφάλμα που παρουσιάστηκε κατά την ανάγνωση γραφής στο iPhone" στο iTunes

Από την άποψη της ασφάλειας, αυτό είναι καλό γιατί το Podman είναι λιγότερο ευάλωτο σε επιθέσεις, εάν ο δαίμονας δεν χρειάζεται να εκτελείται 24 ώρες το 24ωρο, 7 ημέρες την εβδομάδα με προνόμια υπερχρήστη. Το Podman δεν απαιτεί διαδικασία παρασκηνίου λόγω της αρχιτεκτονικής, η οποία διαφέρει θεμελιωδώς από το Docker.

Ενώ το Docker ακολουθεί το μοντέλο πελάτη-διακομιστή, όπου ο πελάτης Docker επικοινωνεί με τον δαίμονα του Docker μέσω ενός API, ο Podman ακολουθεί το μοντέλο fork-exec. Κάθε κοντέινερ εκτελείται ως θυγατρική διαδικασία του Podman.

Ένας χώρος ονομάτων χρήστη δημιουργείται κατά την πρώτη χρήση όταν το Podman εκτελείται με κανονικά δικαιώματα χρήστη. Στον χώρο ονομάτων χρήστη, το Podman εκτελείται με δικαιώματα root και έχει τα δικαιώματα να προσαρτά συστήματα αρχείων και να δημιουργεί κοντέινερ.

Αντίστοιχα, το κοντέινερ Podman έχει μόνο τα δικαιώματα που έχει ο χρήστης που εκτελεί. Η χρήση χώρων ονομάτων χρήστη σημαίνει ότι κάθε χρήστης μπορεί να δημιουργήσει και να διαχειριστεί τα δικά του κοντέινερ, αλλά αυτά δεν είναι ορατά στους άλλους χρήστες και στον υπερχρήστη.

Επειδή το Podman λειτουργεί ανεξάρτητα από το Docker, οι προγραμματιστές έχουν πολλά περιθώρια και μπορούν να ανταποκριθούν στις επιθυμίες της κοινότητας. Οι ενδιαφέρουσες προσθήκες στο Podman περιλαμβάνουν την εντολή mount/unmount και την ενοποίηση του συστήματος.

Ο κεντρικός υπολογιστής μπορεί να χρησιμοποιήσει την εντολή mount/unmount για να προσαρτήσει το σύστημα αρχείων του κοντέινερ, για παράδειγμα, για να αποκτήσει πρόσβαση ή να αλλάξει αρχεία και στη συνέχεια να τα αποπροσαρτήσει ξανά.

Ενώ η παρακολούθηση των κοντέινερ με χρήση systemd δεν λειτουργεί λόγω του δαίμονα στο Docker με το Podman, τα κοντέινερ μπορούν να ξεκινήσουν, να παρακολουθηθούν και ακόμη και να επανεκκινηθούν μέσω του systemd.

Επιπλέον, το Podman παρέχει την εντολή podman generate systemd, η οποία δημιουργεί μια αντίστοιχη υπηρεσία systemd για το αντίστοιχο κοντέινερ και έτσι απαλλάσσει τον χρήστη από τη δημιουργία των υπηρεσιών systemd, πράγμα που σημαίνει ότι η ενσωμάτωση στο κεντρικό σύστημα είναι διαθέσιμη.

Μια άλλη κρίσιμη διαφορά μεταξύ του Podman και του Docker είναι ότι το τελευταίο δεν αλλάζει τους κανόνες του τείχους προστασίας ή την τρέχουσα εγκατάσταση του dnsmasq λόγω της ικανότητάς του να δημιουργεί ένα εσωτερικό δίκτυο. Αντίθετα, ο Docker πρέπει να αντικαταστήσει τους κανόνες του τείχους προστασίας για να ενεργοποιήσει την επικοινωνία μεταξύ κοντέινερ.

PodmanDockerArchitecture DaemonDaemon lessServices Management SystemdDocker EngineFirewall Συμβατότητα Αντικαθιστά κανόνες τείχους προστασίας Σέβεται τους κανόνες τείχους προστασίαςΠλατφόρμαΕγγενής υποστήριξη για Linux, Windows και Mac

Πότε πρέπει να κάνετε μετεγκατάσταση από το Docker στο Podman

Εάν αναπτύσσετε κοντέινερ σε περιβάλλον που βασίζεται σε RHEL, σε αυτήν την περίπτωση, δεν έχετε πολλές επιλογές εκτός από το να χρησιμοποιήσετε το Podman καθώς είναι εγγενές RHEL. Μπορείτε επίσης να κάνετε μετεγκατάσταση ή να επιλέξετε το Podman έναντι του Docker εάν έχετε μικρές αναπτύξεις με λίγα κοντέινερ.

  Πώς να διαχειριστείτε τις ρυθμίσεις λογαριασμού EA

Ωστόσο, εάν θέλετε να κάνετε κάτι πιο περίπλοκο από αυτό, έχετε πολλά κοντέινερ και μια στοίβα συντονιστικών κοντέινερ με docker-compose/podman-compose μέσω ενός δικτύου. Είναι καλύτερο να χρησιμοποιήσετε το Docker καθώς χειρίζεται πολύ καλύτερα τη δικτύωση.

Ομοίως, εάν μόλις αρχίζετε να εισέρχεστε στον κόσμο των εμπορευματοκιβωτίων, σε αυτήν την περίπτωση, το Docker είναι μια καλύτερη επιλογή, καθώς είναι σταθερό, καλά εδραιωμένο με την κατάλληλη τεκμηρίωση και έχει μια ρηχή καμπύλη εκμάθησης σε σύγκριση με το Podman, το οποίο εξακολουθεί να μην έχει σταθερότητα και δεν διαθέτει καλά καθορισμένη τεκμηρίωση.

Μετανάστευση από το Podman στο Docker

Εάν βρίσκεστε στη γραμμή εντολών, είναι πολύ εύκολο να μεταβείτε από το Docker Engine στο Podman. Στην απλούστερή του, ένα ψευδώνυμο $ κάνει εντολή docker=podman τις περισσότερες φορές λειτουργεί.

Φυσικά, αυτό προϋποθέτει ότι το κατάλληλο λογισμικό είναι εγκατεστημένο στο σύστημα. Στην περίπτωση του Linux, ούτε αυτό είναι πρόβλημα. έτοιμα πακέτα λογισμικού είναι διαθέσιμα για εμπορικά διαθέσιμες διανομές.

Τα Windows ή το macOS δεν περιλαμβάνονται στα υποστηριζόμενα λειτουργικά συστήματα. Η προσέγγιση ψευδωνύμου λειτουργεί επειδή πολλές εντολές Docker έχουν ένα αντίστοιχο Podman.

Υπάρχουν όμως και εξαιρέσεις καθώς ορισμένες εντολές Docker δεν έχουν αντίστοιχες στον κόσμο του Podman. Ομοίως, ορισμένες εντολές συμπεριφέρονται διαφορετικά στο Docker από ότι στο σύμπαν του Podman. Προς το παρόν, αυτό επηρεάζει μόνο τον χειρισμό τόμων που έχουν ήδη ρυθμιστεί.

Η εναλλαγή είναι λίγο πιο δύσκολη όταν χρησιμοποιούνται γραφικά εργαλεία όπως το Docker Desktop. Θα πρέπει να επηρεάσει ιδιαίτερα εκείνους τους προγραμματιστές που εργάζονται με Windows ή macOS.

Οι χρήστες του Docker Desktop θα πρέπει να συνηθίσουν στη γραμμή εντολών και το ίδιο ισχύει και για τη σύνθεση Docker. Ωστόσο, υπάρχει το έργο podman-compose. Γραπτό σε Python, το λογισμικό χρησιμεύει ως αντικατάσταση του Docker compose.

Τελικές Λέξεις

Η αντικατάσταση του Docker από τον Podman μπορεί να θεωρηθεί σχεδόν τελειωμένη. Για τους χρήστες και τους διαχειριστές, οι περισσότερες πτυχές αυτής της αλλαγής είναι εύκολες. Πολλά χαρακτηριστικά του Docker έχουν πανομοιότυπα ισοδύναμα στο Podman.

Ένα πραγματικό όφελος είναι η έλλειψη μιας μοναδικής διαδικασίας δαίμονα και προνομίων root, για να μην αναφέρουμε τη φυσική χρήση των ομάδων κοντέινερ. Ωστόσο, αξίζει να αναφέρουμε ότι η Docker παραμένει η κύρια τεχνολογία όσον αφορά τα κοντέινερ, αλλά αυτό πιθανότατα θα αλλάξει μακροπρόθεσμα.

Μπορείτε επίσης να εξερευνήσετε ορισμένες εντολές Docker για τη διαχείριση κοντέινερ.