Πώς να διαχειριστείτε κοντέινερ χρησιμοποιώντας το Podman και το Skopeo στο RHEL 8


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

Τι είναι οι εικόνες κοντέινερ;

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

Το Red Hat Linux παρέχει ένα σύνολο χρήσιμων εργαλείων κοντέινερ τα οποία μπορείτε να αξιοποιήσετε για να εργαστείτε απευθείας με κοντέινερ Linux χρησιμοποιώντας τις εντολές του docker που απαιτούν. Αυτά περιλαμβάνουν:

  • Podman – Αυτή είναι μια μηχανή κοντέινερ χωρίς δαίμονες για λειτουργία και διαχείριση κοντέινερ OCI είτε σε λειτουργία root είτε χωρίς root. Το Podman είναι παρόμοιο με το Docker και έχει τις ίδιες επιλογές εντολών εκτός από το ότι το Docker είναι ένας δαίμονας. Μπορείτε να τραβήξετε, να εκτελέσετε και να διαχειριστείτε εικόνες κοντέινερ χρησιμοποιώντας το podman με τον ίδιο σχεδόν τρόπο που θα κάνατε με το Docker. Το Podman έρχεται με πολλές προηγμένες δυνατότητες, ενσωματώνεται πλήρως με συστήματα και προσφέρει υποστήριξη χώρου ονομάτων χρήστη που περιλαμβάνει κοντέινερ που τρέχουν χωρίς να απαιτείται χρήστης root.
  • Skopeo: Αυτό είναι ένα εργαλείο γραμμής εντολών που χρησιμοποιείται για την αντιγραφή εικόνων κοντέινερ από ένα μητρώο σε άλλο. Μπορείτε να χρησιμοποιήσετε το Skopeo για να αντιγράψετε εικόνες από και προς έναν συγκεκριμένο κεντρικό υπολογιστή, καθώς και για να αντιγράψετε εικόνες σε άλλο μητρώο κοντέινερ ή περιβάλλον. Εκτός από την αντιγραφή εικόνων, μπορείτε να το χρησιμοποιήσετε για να επιθεωρήσετε εικόνες από διάφορα μητρώα και να χρησιμοποιήσετε υπογραφές για να δημιουργήσετε και να επαληθεύσετε εικόνες.
  • Buildah: Αυτό είναι ένα σύνολο εργαλείων γραμμής εντολών που χρησιμοποιούνται για τη δημιουργία και τη διαχείριση εικόνων OCI κοντέινερ χρησιμοποιώντας αρχεία Docker.

Σε αυτό το άρθρο, θα επικεντρωθούμε στη Διαχείριση κοντέινερ με χρήση podman και Skopeo.

Αναζήτηση εικόνων κοντέινερ από απομακρυσμένο μητρώο

Η εντολή αναζήτηση podman σάς επιτρέπει να κάνετε αναζήτηση σε επιλεγμένα απομακρυσμένα μητρώα για εικόνες κοντέινερ. Η προεπιλεγμένη λίστα μητρώων ορίζεται στο αρχείο registries.conf που βρίσκεται στον κατάλογο /etc/containers/.

Τα μητρώα ορίζονται από 3 ενότητες.

  • [registries.search] – Αυτή η ενότητα καθορίζει τα προεπιλεγμένα μητρώα που το podman μπορεί να αναζητήσει εικόνες κοντέινερ. Αναζητά την εικόνα που ζητήθηκε στα μητρώα registry.access.redhat.com, registry.redhat.io, και docker.io.< /li>

  • [registries.insecure]– Αυτή η ενότητα καθορίζει μητρώα που δεν εφαρμόζουν κρυπτογράφηση TLS, δηλαδή μη ασφαλή μητρώα. Από προεπιλογή, δεν καθορίζονται καταχωρήσεις.

  • [registries.block] – Αυτό αποκλείει ή αποκλείει την πρόσβαση στα καθορισμένα μητρώα από το τοπικό σας σύστημα. Από προεπιλογή, δεν καθορίζονται καταχωρήσεις.

Ως κανονικός (μη root) χρήστης που εκτελεί την εντολή podman, μπορείτε να ορίσετε το δικό σας αρχείο registries.conf στον αρχικό σας κατάλογο ($HOME/.config /containers/registries.conf) για να παρακάμψετε ρυθμίσεις σε όλο το σύστημα.

Κανόνες κατά τον καθορισμό μητρώων

Καθώς προσδιορίζετε τα μητρώα, έχετε υπόψη σας τα εξής:

  • Κάθε μητρώο θα πρέπει να περικλείεται με μεμονωμένα εισαγωγικά.
  • Τα μητρώα μπορούν να καθοριστούν χρησιμοποιώντας είτε όνομα κεντρικού υπολογιστή είτε διεύθυνση IP.
  • Εάν καθορίζονται πολλά μητρώα, τότε θα πρέπει να διαχωριστούν με κόμμα.
  • Εάν ένα μητρώο χρησιμοποιεί μια μη τυπική θύρα – είτε θύρα TCP 443 για ασφαλή και 80 για μη ασφαλή, – ο αριθμός θύρας θα πρέπει να καθοριστεί δίπλα στο όνομα μητρώου, π.χ. registry.example.com:5566.

Για να αναζητήσετε ένα μητρώο για μια εικόνα κοντέινερ χρησιμοποιώντας τη σύνταξη:

# podman search registry/container_image

Για παράδειγμα, για να αναζητήσετε μια εικόνα Redis στο μητρώο registry.redhat.io, χρησιμοποιήστε την εντολή:

# podman search registry.redhat.io/redis

Για αναζήτηση μιας εικόνας κοντέινερ MariaDB εκτελέστε.

# podman search registry.redhat.io/mariadb

Για να λάβετε μια περίπλοκη περιγραφή μιας εικόνας κοντέινερ, χρησιμοποιήστε την επιλογή --no-trunc πριν από το όνομα της εικόνας κοντέινερ από τα αποτελέσματα που λαμβάνετε. Για παράδειγμα, θα προσπαθήσουμε να λάβουμε μια λεπτομερή περιγραφή της εικόνας του κοντέινερ MariaDB όπως φαίνεται:

# podman search --no-trunc registry.redhat.io/rhel8/mariadb-103

Τραβώντας εικόνες κοντέινερ

Το τράβηγμα ή η ανάκτηση εικόνων κοντέινερ από ένα απομακρυσμένο μητρώο απαιτεί πρώτα τον έλεγχο ταυτότητας πριν από οτιδήποτε άλλο. Για παράδειγμα, για να ανακτήσετε την εικόνα κοντέινερ MariaDB, συνδεθείτε πρώτα στο μητρώο Redhat:

# podman login

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

Login Succeeded!

Τώρα, μπορείτε να τραβήξετε την εικόνα χρησιμοποιώντας τη σύνταξη που φαίνεται:

# podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

Το <registry> αναφέρεται στον απομακρυσμένο κεντρικό υπολογιστή ή το μητρώο που παρέχει ένα χώρο αποθήκευσης εικόνων κοντέινερ στο TCP <port>. Το <namespace> και το <name> καθορίζουν συλλογικά μια εικόνα κοντέινερ με βάση το <namespace> στο μητρώο. Τέλος, η επιλογή <tag> καθορίζει την έκδοση της εικόνας του κοντέινερ. Εάν δεν έχει καθοριστεί καμία, χρησιμοποιείται η προεπιλεγμένη ετικέτα - η τελευταία -.

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

Για να τραβήξετε την εικόνα MariaDB, εκτελέστε την εντολή:

# podman pull registry.redhat.io/rhel8/mariadb-103

  • Το <registry> – registry.redhat.io
  • Το <namespace> – rhel8
  • Το <name> – MariaDB
  • Το <tag> – 103

Για τις επόμενες εικόνες κοντέινερ, δεν απαιτείται περαιτέρω σύνδεση, καθώς έχετε ήδη πιστοποιηθεί. Για να τραβήξετε μια εικόνα κοντέινερ Redis, απλώς εκτελέστε:

# podman pull registry.redhat.io/rhscl/redis-5-rhel7

Εικόνες κοντέινερ καταχώρισης

Μόλις ολοκληρώσετε το τράβηγμα των εικόνων, μπορείτε να προβάλετε τις εικόνες που υπάρχουν αυτήν τη στιγμή στον κεντρικό υπολογιστή σας εκτελώντας την εντολή podman images.

# podman images

Επιθεώρηση εικόνων κοντέινερ

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

Για να επιθεωρήσετε μια εικόνα, εκτελέστε την εντολή podman inspect ακολουθούμενη από το αναγνωριστικό εικόνας ή το χώρο αποθήκευσης.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

Στο παρακάτω παράδειγμα, επιθεωρούμε το κοντέινερ MariaDB.

# podman inspect registry.redhat.io/rhel8/mariadb-103

Για να τραβήξετε συγκεκριμένα μεταδεδομένα για ένα κοντέινερ, περάστε την επιλογή --format ακολουθούμενη από τα μεταδεδομένα και την ταυτότητα του κοντέινερ ( Αναγνωριστικό εικόνας ή όνομα ).

Στο παρακάτω παράδειγμα, ανακτούμε πληροφορίες σχετικά με την αρχιτεκτονική και την περιγραφή του κοντέινερ βάσης RHEL 8 που εμπίπτει στην ενότητα Ετικέτες.

# podman inspect --format=’{{.Labels.architecture}}’ image ID
# podman inspect --format=’{{.Labels.description}}’ image ID

Για να επιθεωρήσετε μια απομακρυσμένη εικόνα από άλλο μητρώο, χρησιμοποιήστε την εντολή skopeo inspect. Στο παρακάτω παράδειγμα, επιθεωρούμε μια εικόνα init RHEL 8 που φιλοξενείται στο Docker.

# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init

Προσθήκη ετικετών σε εικόνες κοντέινερ

Όπως ίσως έχετε σημειώσει, τα ονόματα εικόνων είναι συνήθως γενικής φύσης. Για παράδειγμα, η εικόνα redis έχει την ετικέτα:

registry.redhat.io/rhscl/redis-5-rhel7

Η προσθήκη ετικετών σε εικόνες τους δίνει ένα πιο διαισθητικό όνομα για να κατανοήσουν καλύτερα τι περιέχουν. Χρησιμοποιώντας την εντολή podman tag, μπορείτε να δημιουργήσετε μια ετικέτα εικόνας η οποία είναι ουσιαστικά ψευδώνυμο ενός ονόματος εικόνας που περιλαμβάνει διαφορετικά μέρη.

Αυτά είναι:

registry/username/NAME:tag

Για παράδειγμα, για να αλλάξουμε το γενικό όνομα της εικόνας Redis που έχει αναγνωριστικό 646f2730318c , θα εκτελέσουμε την εντολή:

# podman tag 646f2730318c myredis

Για να προσθέσετε μια ετικέτα στο τέλος, προσθέστε μια πλήρη άνω και κάτω τελεία ακολουθούμενη από τον αριθμό της ετικέτας:

# podman tag 646f2730318c myredis:5.0

Χωρίς να προσθέσετε τον αριθμό της ετικέτας, θα της εκχωρηθεί απλώς το πιο πρόσφατο χαρακτηριστικό.

Εικόνες κοντέινερ που τρέχουν

Για να εκτελέσετε ένα κοντέινερ, χρησιμοποιήστε την εντολή podman run. Για παράδειγμα:

# podman run image_id

Για να εκτελέσετε ένα κοντέινερ αθόρυβα στο παρασκήνιο ως υπηρεσία δαίμονα χρησιμοποιήστε την επιλογή -d όπως φαίνεται.

# podman run -d image_id

Για παράδειγμα, για να εκτελέσουμε την εικόνα redis με αναγνωριστικό 646f2730318c, θα καλέσουμε την εντολή:

# podman run -d 646f2730318c

Εάν εκτελείτε ένα κοντέινερ που βασίζεται σε λειτουργικό σύστημα, όπως η εικόνα βάσης RHEL 8, μπορείτε να αποκτήσετε πρόσβαση στο κέλυφος χρησιμοποιώντας την οδηγία -it. Η επιλογή -i δημιουργεί μια διαδραστική περίοδο λειτουργίας ενώ η επιλογή -t δημιουργεί μια τερματική συνεδρία. Η επιλογή --name ορίζει το όνομα του κοντέινερ σε mybash ενώ είναι το ecbc6f53bba0 αναγνωριστικό εικόνας της βασικής εικόνας.

# podman run -it --name=mybash ecbc6f53bba0

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

# cat /etc/os-release

Για να βγείτε από το κοντέινερ, απλώς καλέστε την εντολή εξόδου.

# exit

Μόλις βγείτε από το κοντέινερ, σταματά αυτόματα. Για να ξεκινήσετε ξανά το κοντέινερ, χρησιμοποιήστε την εντολή podman start με τη σημαία -ai όπως φαίνεται.

# podman start -ai mybash

Για άλλη μια φορά, αυτό σας δίνει πρόσβαση στο κέλυφος.

Καταχώριση Running Container Images

Για να παραθέσετε τα κοντέινερ που εκτελούνται αυτήν τη στιγμή, χρησιμοποιήστε την εντολή podman ps όπως φαίνεται.

# podman ps

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

# podman ps -a

Διαμόρφωση εικόνων κοντέινερ για αυτόματη εκκίνηση στην υπηρεσία Systemd Service

Σε αυτήν την ενότητα, εστιάζουμε στον τρόπο με τον οποίο ένα κοντέινερ μπορεί να ρυθμιστεί ώστε να λειτουργεί απευθείας σε ένα σύστημα RHEL ως υπηρεσία systemd.

Πρώτα, αποκτήστε την εικόνα που προτιμάτε. Σε αυτήν την περίπτωση, έχουμε τραβήξει την εικόνα Redis από το docker hub:

# podman pull docker.io/redis

Εάν έχετε το SELinux που εκτελείται στο σύστημά σας, θα πρέπει να ενεργοποιήσετε το δυαδικό container_manage_cgroup για την εκτέλεση κοντέινερ με systemd.

# setsebool -p container_manage_cgroup on

Στη συνέχεια, εκτελέστε την εικόνα κοντέινερ στο παρασκήνιο και αντιστοιχίστε την στο όνομα της εικόνας που προτιμάτε. Σε αυτό το παράδειγμα, ονομάσαμε την εικόνα μας redis_server και αντιστοιχίσαμε τη θύρα 6379 από το κοντέινερ στον κεντρικό μας υπολογιστή RHEL 8

# podman run -d --name redis_server -p 6379:6379 redis

Στη συνέχεια, θα δημιουργήσουμε ένα αρχείο ρύθμισης παραμέτρων μονάδας systemd για redis στον κατάλογο /etc/systemd/system/.

# vim /etc/systemd/system/redis-container.service

Επικολλήστε το παρακάτω περιεχόμενο στο αρχείο.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Αποθηκεύστε και βγείτε από το αρχείο.

Στη συνέχεια, διαμορφώστε το κοντέινερ ώστε να ξεκινά αυτόματα κατά την εκκίνηση.

# systemctl enable redis-container.service

Στη συνέχεια, ξεκινήστε το κοντέινερ και επαληθεύστε την κατάσταση λειτουργίας του.

# systemctl start redis-container.service
# systemctl status redis-container.service

Διαμόρφωση μόνιμης αποθήκευσης για εικόνες κοντέινερ

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

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

$ podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

Η επιλογή --privileged μεταβιβάζεται όταν το SELinux έχει ρυθμιστεί σε επιβολή. Η επιλογή -v καθορίζει τον εξωτερικό τόμο που βρίσκεται στον κεντρικό υπολογιστή. Ο τόμος κοντέινερ εδώ είναι ο κατάλογος /mnt.

Μόλις αποκτήσουμε πρόσβαση στο κέλυφος, θα δημιουργήσουμε ένα δείγμα αρχείου testing.txt στον κατάλογο /mnt όπως φαίνεται.

$ echo "This tests persistent external storage" > /mnt/testing.txt

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

# exit
# cat /var/lib/containers/backup_storage/testing.txt

ΈξοδοςΑυτό δοκιμάζει μόνιμο εξωτερικό χώρο αποθήκευσης.

Στάση και αφαίρεση δοχείων

Μόλις ολοκληρώσετε τη λειτουργία του κοντέινερ σας, μπορείτε να το σταματήσετε χρησιμοποιώντας την εντολή podman stop ακολουθούμενη από το container-id που μπορείτε να αποκτήσετε από το podman ps< εντολή.

# podman stop container-id

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

# podman rm container-id

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

# podman rm container-id-1 container-id-2 container-id-3

Για να διαγράψετε όλα τα κοντέινερ, εκτελέστε την εντολή:

# podman rm -a

Αφαίρεση εικόνας

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

Στη συνέχεια, προχωρήστε και εκτελέστε την εντολή podman -rmi ακολουθούμενη από το αναγνωριστικό της εικόνας όπως φαίνεται:

# podman -rmi image-id

συμπέρασμα

Αυτό ολοκληρώνει αυτό το κεφάλαιο σχετικά με τη διαχείριση και την εργασία με κοντέινερ στο RHEL 8. Ελπίζουμε ότι αυτός ο οδηγός παρείχε μια αξιοπρεπή κατανόηση των κοντέινερ και του τρόπου με τον οποίο μπορείτε να αλληλεπιδράσετε και να τα διαχειριστείτε στο σύστημά σας RHEL χρησιμοποιώντας podman και Skopeo.