Τον περασμένο μήνα έδωσα μια ομιλία στο Εργαστήριο Wetton στην Οξφόρδη. Σε αντίθεση με τις άλλες ομιλίες εκείνης της εβδομάδας, η δική μου δεν αφορούσε την αστρονομία. μιλούσα για Λιμενεργάτης – ένα χρήσιμο εργαλείο που έχει γίνει δημοφιλές μεταξύ των ανθρώπων που εκτελούν υπηρεσίες web. Το χρησιμοποιούμε σχεδόν για τα πάντα εδώ και είναι αρκετά σαφές ότι οι ερευνητές θα το έβρισκαν χρήσιμο αν το χρησιμοποιούσαν μόνο περισσότεροι από αυτούς. Αυτό ισχύει ιδιαίτερα σε τομείς όπως η αστρονομία, όπου πολλοί άνθρωποι γράφουν τον δικό τους κώδικα για να επεξεργαστούν και να αναλύσουν τα δεδομένα τους. Εάν μετά την ανάγνωση αυτής της ανάρτησης πιστεύετε ότι θα θέλατε να δοκιμάσετε το Docker και θέλετε βοήθεια για να ξεκινήσετε, απλώς έρχομαι σε επαφή και θα χαρώ να βοηθήσω.
Θα δώσω μια σύντομη περιγραφή του τι είναι το Docker και γιατί είναι χρήσιμο, αλλά πρώτα ας θέσουμε το σκηνικό. Προσπαθείτε να εκτελέσετε ένα σενάριο Πύθων που χρειάζεται μια συγκεκριμένη έκδοση NumPy. Εγκαθιστάς αυτήν την έκδοση αλλά δεν φαίνεται να λειτουργεί. Ή έχετε ήδη εγκατεστημένη μια διαφορετική έκδοση για άλλο έργο και δεν μπορείτε να την αλλάξετε. Ή η έκδοση που χρειάζεται είναι πολύ παλιά και δεν είναι πλέον διαθέσιμη για λήψη. Ξοδεύετε ώρες εγκαθιστώντας διαφορετικούς συνδυασμούς πακέτων και τελικά το κάνετε να λειτουργεί, αλλά δεν είστε σίγουροι τι ακριβώς το έφτιαξε και δεν θα μπορούσατε να επαναλάβετε τα ίδια βήματα στο μέλλον αν θέλετε να αναπαράγετε ακριβώς το περιβάλλον που εργάζεστε τώρα σε.
Πολλά έργα απαιτούν έναν διασυνδεδεμένο ιστό εξαρτήσεων, επομένως υπάρχουν πολλά πράγματα που μπορεί να πάνε στραβά όταν προσπαθείτε να ρυθμίσετε τα πάντα. Υπάρχουν μερικά εργαλεία που μπορούν να βοηθήσουν σε ορισμένα από αυτά τα προβλήματα. Για Python μπορείτε να χρησιμοποιήσετε εικονικά περιβάλλοντα ή Ανακόνδας. Ορισμένες γλώσσες εγκαθιστούν εξαρτήσεις στον κατάλογο του έργου για την αποφυγή διενέξεων, οι οποίες μπορεί να προκαλέσουν τα δικά τους προβλήματα. Τίποτα από αυτά δεν βοηθά όταν οι σωστές εκδόσεις πακέτων απλώς δεν είναι πλέον διαθέσιμες, και καμία από αυτές τις επιλογές δεν καθιστά εύκολη τη λήψη και εκτέλεση του κώδικά σας χωρίς πολλές κουραστικές ρυθμίσεις. Ειδικά αν το άτομο που το κατεβάζει δεν είναι ήδη εξοικειωμένο με την Python, για παράδειγμα.
Εάν τα άτομα που κάνουν λήψη του κώδικά σας σήμερα δυσκολεύονται να τον εκτελέσουν, πώς θα περάσουν χρόνια από τώρα όταν η έκδοση του NumPy που χρησιμοποιήσατε δεν είναι πλέον διαθέσιμη και η τρέχουσα έκδοση δεν είναι συμβατή; Αυτό είναι αν υπάρχει ακόμη και μια τρέχουσα έκδοση μετά από τόσα χρόνια. Ίσως οι άνθρωποι να μην χρησιμοποιούν καν Python τότε.
Ευτυχώς υπάρχει τώρα μια λύση σε όλα αυτά, και λέγεται κοντέινερ λογισμικού. Τα δοχεία λογισμικού είναι ένας τρόπος συσκευασίας εφαρμογών στο δικό τους αυτόνομο περιβάλλον. Όλα όσα χρειάζεστε για να εκτελέσετε την εφαρμογή είναι ομαδοποιημένα με την ίδια την εφαρμογή και απομονώνονται από το υπόλοιπο λειτουργικό σύστημα όταν εκτελείται. Δεν χρειάζεται να εγκαταστήσετε αυτό και αυτό, να αναβαθμίσετε κάποιο άλλο πράγμα, να ελέγξετε τη φάση του φεγγαριού και να κρατήσετε την αναπνοή σας για να εκτελεστεί ο κωδικός κάποιου. Απλώς εκτελείτε μία εντολή και είτε η εφαρμογή έχει δημιουργηθεί με Python, Ruby, Java ή κάποιο άλλο πράγμα που δεν έχετε ακούσει ποτέ, θα εκτελεστεί όπως αναμένεται. Δεν απαιτείται ρύθμιση!
Το Docker είναι ο πιο γνωστός τρόπος εκτέλεσης κοντέινερ στον υπολογιστή σας. Υπάρχουν και άλλες επιλογές, όπως π.χ Kubernetesαλλά θα μιλήσω μόνο για τον Docker εδώ.
Η χρήση δοχείων θα μπορούσε να βελτιώσει σοβαρά την αναπαραγωγιμότητα της έρευνάς σας. Εάν ομαδοποιήσετε τον κώδικα και τα δεδομένα σας σε μια εικόνα Docker και δημοσιεύσετε αυτήν την εικόνα μαζί με τα χαρτιά σας, οποιοσδήποτε στον κόσμο θα μπορεί να εκτελέσει ξανά τον κώδικά σας και να λάβει τα ίδια αποτελέσματα χωρίς σχεδόν καμία προσπάθεια. Αυτό περιλαμβάνει τον εαυτό σας σε λίγα χρόνια από τώρα, όταν δεν θυμάστε πώς λειτουργεί ο κώδικάς σας και οι μισές από τις εξαρτήσεις του δεν είναι πλέον διαθέσιμες για εγκατάσταση.
Υπάρχει μια αυξανόμενη κίνηση για τους ερευνητές να δημοσιεύουν όχι μόνο τα αποτελέσματά τους, αλλά και τα ακατέργαστα δεδομένα τους και τον κώδικα που χρησιμοποίησαν για την επεξεργασία τους. Τα κοντέινερ είναι ο τέλειος μηχανισμός για τη δημοσίευση και των δύο μαζί. Μια αναζήτηση του arXiv δείχνει ότι έχουν γίνει μόνο 40 αναφορές του Docker σε έγγραφα σε όλα τα πεδία το περασμένο έτος. Για σύγκριση, έχουν υπάρξει 474 εργασίες που αναφέρουν την Python, πολλές από τις οποίες (πιθανώς οι περισσότερες, αλλά δεν έχω μετρήσει) παρουσιάζουν σενάρια και ενότητες που δημιουργήθηκαν από τους συγγραφείς. Αυτό χωρίς καν να αναφέρουμε άλλες γλώσσες προγραμματισμού. Αυτή είναι μια χαμένη ευκαιρία, δεδομένου του πόσο ευκολότερο θα ήταν να εκτελεστεί όλος αυτός ο κώδικας εάν οι συγγραφείς παρείχαν εικόνες Docker. (Ορισμένοι από αυτούς τους συγγραφείς ενδέχεται να παρέχουν εικόνες Docker χωρίς να το αναφέρουν στο έγγραφο, αλλά αυτός ο αριθμός θα είναι μικρός.)
Το ίδιο το Docker είναι ανοιχτού κώδικα και όλες οι βασικές μορφές αρχείων και τα σχέδια είναι τυποποιημένα από το Πρωτοβουλία Open Container. Εκτός από το Docker, άλλα μέλη της OCI περιλαμβάνουν τεχνολογικούς γίγαντες όπως η Amazon, το Facebook, η Microsoft, η Google και πολλοί άλλοι. Η τεχνολογία έχει σχεδιαστεί για να είναι μελλοντική απόδειξη και δεν θα εξαφανιστεί και δεν θα κλειδωθείτε σε προϊόντα κάποιου προμηθευτή χρησιμοποιώντας την. Εάν συσκευάσετε το λογισμικό σας σε ένα κοντέινερ Docker, μπορείτε να είστε εύλογα σίγουροι ότι θα συνεχίσει να λειτουργεί σε χρόνια ή δεκαετίες από τώρα. Μπορείτε να εγκαταστήσετε το Docker δωρεάν από λήψη της κοινοτικής έκδοσης.
Πώς μπορεί, λοιπόν, το Docker να ταιριάζει στην εργάσιμη ημέρα σας; Ο κύκλος ανάπτυξής σας πιθανότατα θα μοιάζει κάπως έτσι: Πρώτα πιθανώς θα περιγράψετε μια αρχική έκδοση του κώδικα και, στη συνέχεια, θα γράψετε ένα Dockerfile που θα περιέχει τις οδηγίες για την εγκατάσταση των εξαρτήσεων και την εκτέλεση του κώδικα. Τότε είναι βασικά το ίδιο με αυτό που θα κάνατε συνήθως. Καθώς εργάζεστε πάνω στον κώδικα, θα επαναλάβατε δημιουργώντας μια εικόνα και στη συνέχεια εκτελώντας αυτήν την εικόνα ως κοντέινερ για να τη δοκιμάσετε. (Με πιο προηγμένη χρήση, μπορείτε συχνά να αποφύγετε τη δημιουργία μιας νέας εικόνας κάθε φορά που την εκτελείτε, προσαρτώντας τον κατάλογο εργασίας στο κοντέινερ κατά την εκτέλεση.) Μόλις ο κώδικας είναι έτοιμος, μπορείτε να τον καταστήσετε διαθέσιμο δημοσιεύοντας την εικόνα Docker.
Υπάρχουν τρεις προσεγγίσεις για τη δημοσίευση της εικόνας: ωθήστε την εικόνα στο Docker Hub ή άλλο μητρώο Docker, δημοσιεύστε το Dockerfile μαζί με τον κώδικά σας ή εξάγετε την εικόνα ως αρχείο tar και ανεβάστε το κάπου. Προφανώς αυτά δεν αλληλοαποκλείονται. Θα πρέπει να κάνετε τουλάχιστον τα δύο πρώτα, και ίσως είναι επίσης συνετό να δημοσιεύσετε το αρχείο tar οπουδήποτε θα δημοσιεύατε κανονικά τα δεδομένα σας.
Το Docker Hub είναι ένα δωρεάν μητρώο για εικόνες, επομένως είναι ένα καλό μέρος για να ανεβάσετε τις εικόνες σας ώστε να μπορούν να τις βρουν άλλοι χρήστες του Docker. Εκεί θα βρείτε επίσης μια μεγάλη ποικιλία από έτοιμες εικόνες Docker, που δημιουργήθηκαν από το ίδιο το έργο Docker και δημιουργήθηκαν από άλλους χρήστες. Εμείς στο Zooniverse δημοσιεύουμε όλες τις εικόνες Docker που χρησιμοποιούμε για τη δική μας εργασία στο Docker Hub και είναι σημαντικό μέρος του τρόπου με τον οποίο διαχειριζόμαστε την υποδομή των υπηρεσιών ιστού μας. Υπάρχουν εικόνες για πολλές μεγάλες γλώσσες προγραμματισμού και περιβάλλοντα λειτουργικού συστήματος.
Υπάρχουν επίσης μερικά πακέτα που θα σας επιτρέψουν να εκτελείτε κοντέινερ σε υπολογιστικά περιβάλλοντα υψηλής απόδοσης. Δύο δημοφιλείς είναι Μοναδικότητα και Αλλάσσων. Αυτά θα σας επιτρέψουν να αναπτύξετε τοπικά χρησιμοποιώντας το Docker και, στη συνέχεια, να μετατρέψετε την εικόνα του Docker ώστε να εκτελείται στο σύμπλεγμα HPC. Αυτό σημαίνει ότι το περιβάλλον στο οποίο εκτελείται στο σύμπλεγμα θα είναι πανομοιότυπο με το περιβάλλον ανάπτυξής σας, επομένως δεν θα αντιμετωπίσετε εκπλήξεις όταν έρθει η ώρα να το εκτελέσετε. Μιλήστε με τους ανθρώπους IT/HPC του ιδρύματός σας για να μάθετε ποιες επιλογές είναι διαθέσιμες για εσάς.
Ας ελπίσουμε ότι έχω υποστηρίξει τη χρήση του Docker (ή των κοντέινερ γενικά) για την έρευνά σας. Ρίξτε μια ματιά στο Docker οδηγός έναρξης για να μάθετε περισσότερα, και όπως είπα στην αρχή, εάν σκέφτεστε να χρησιμοποιήσετε το Docker στην έρευνά σας και θέλετε να ξεκινήσετε, μη διστάσετε να ελάτε σε επαφή μαζί μου και θα χαρώ να σε βοηθήσω.