Πώς να δημιουργήσετε και να ρυθμίσετε αυτόματα τις προσαρμοσμένες εικόνες Docker με το Dockerfile - Μέρος 3


Αυτό το σεμινάριο θα επικεντρωθεί στον τρόπο δημιουργίας μιας προσαρμοσμένης εικόνας Docker με βάση το Ubuntu με εγκατεστημένη την υπηρεσία Apache. Η όλη διαδικασία θα αυτοματοποιηθεί χρησιμοποιώντας ένα Dockerfile.

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

Απαιτήσεις

  • Εγκαταστήστε το Docker and Learn Docker Container Manipulation – Μέρος 1
  • Ανάπτυξη και εκτέλεση εφαρμογών στο Docker Containers – Μέρος 2

Βασικά, ένα αρχείο Docker περιέχει διάφορες οδηγίες για τη δημιουργία και τη διαμόρφωση ενός συγκεκριμένου κοντέινερ με βάση τις απαιτήσεις σας. Οι παρακάτω οδηγίες είναι οι πιο χρησιμοποιούμενες, μερικές από αυτές είναι υποχρεωτικές:

  1. FROM=Υποχρεωτική ως πρώτη οδηγία σε ένα αρχείο Docker. Δίνει εντολή στον Docker να τραβήξει τη βασική εικόνα από την οποία δημιουργείτε τη νέα εικόνα. Χρησιμοποιήστε μια ετικέτα για να καθορίσετε την ακριβή εικόνα από την οποία δημιουργείτε:

Ex: FROM ubuntu:20.04

  1. MAINTAINER=Συντάκτης της εικόνας κατασκευής
  2. RUN=Αυτή η οδηγία μπορεί να χρησιμοποιηθεί σε πολλές γραμμές και εκτελεί οποιεσδήποτε εντολές μετά τη δημιουργία μιας εικόνας Docker.
  3. CMD=Εκτελέστε οποιαδήποτε εντολή κατά την εκκίνηση της εικόνας Docker. Χρησιμοποιήστε μόνο μία εντολή CMD σε ένα Dockerfile.
  4. ENTRYPOINT=Ίδιο με το CMD αλλά χρησιμοποιείται ως κύρια εντολή για την εικόνα.
  5. EXPOSE=Δίνει εντολή στο κοντέινερ να ακούει στις θύρες δικτύου όταν εκτελείται. Οι θύρες κοντέινερ δεν είναι προσβάσιμες από τον κεντρικό υπολογιστή από προεπιλογή.
  6. ENV=Ορισμός μεταβλητών περιβάλλοντος κοντέινερ.
  7. ΠΡΟΣΘΗΚΗ=Αντιγραφή πόρων (αρχεία, κατάλογοι ή αρχεία από διευθύνσεις URL).

Βήμα 1: Δημιουργία ή σύνταξη αποθετηρίου Dockerfile

1. Αρχικά, ας δημιουργήσουμε κάποιο είδος αποθετηρίων Dockerfile προκειμένου να επαναχρησιμοποιήσουμε αρχεία στο μέλλον για τη δημιουργία άλλων εικόνων. Δημιουργήστε έναν κενό κατάλογο κάπου στο διαμέρισμα /var όπου θα δημιουργήσουμε το αρχείο με τις οδηγίες που θα χρησιμοποιηθούν για τη δημιουργία της νέας εικόνας Docker.

# mkdir -p /var/docker/ubuntu/apache
# touch /var/docker/ubuntu/apache/Dockerfile

2. Στη συνέχεια, ξεκινήστε την επεξεργασία του αρχείου με τις ακόλουθες οδηγίες:

# vi /var/docker/ubuntu/apache/Dockerfile

Απόσπασμα Dokerfile:

FROM ubuntu
MAINTAINER  your_name  <>
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Τώρα, ας δούμε τις οδηγίες του αρχείου:

Η πρώτη γραμμή μας λέει ότι χτίζουμε από μια εικόνα Ubuntu. Εάν δεν υποβληθεί καμία ετικέτα, ας πούμε 14:10 για παράδειγμα, χρησιμοποιείται η πιο πρόσφατη εικόνα από το Docker Hub.

Στη δεύτερη γραμμή, προσθέσαμε το όνομα και το email του δημιουργού της εικόνας. Οι επόμενες δύο γραμμές RUN θα εκτελεστούν στο κοντέινερ κατά τη δημιουργία της εικόνας και θα εγκαταστήσουν τον δαίμονα Apache και το echo κάποιο κείμενο στην προεπιλεγμένη ιστοσελίδα του apache .

Η γραμμή EXPOSE θα δώσει εντολή στο Docker κοντέινερ να ακούει στη θύρα 80, αλλά η θύρα δεν θα είναι διαθέσιμη σε εξωτερικό χώρο. Η τελευταία γραμμή δίνει εντολή στο κοντέινερ να εκτελέσει την υπηρεσία Apache στο προσκήνιο μετά την εκκίνηση του κοντέινερ.

3. Το τελευταίο πράγμα που πρέπει να κάνουμε είναι να ξεκινήσουμε τη δημιουργία της εικόνας εκδίδοντας την παρακάτω εντολή, η οποία θα δημιουργήσει τοπικά μια νέα εικόνα Docker με το όνομα ubuntu-apache με βάση το Το Dockerfile δημιουργήθηκε νωρίτερα, όπως φαίνεται σε αυτό το παράδειγμα:

# docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Αφού δημιουργηθεί η εικόνα από το Docker, μπορείτε να παραθέσετε όλες τις διαθέσιμες εικόνες και να αναγνωρίσετε την εικόνα σας εκδίδοντας την ακόλουθη εντολή:

# docker images

Βήμα 2: Εκτελέστε το Container και αποκτήστε πρόσβαση στον Apache από το LAN

5. Για να εκτελείτε συνεχώς το κοντέινερ (στο παρασκήνιο) και να έχετε πρόσβαση στις υπηρεσίες που εκτίθενται σε κοντέινερ (θύρες) από τον κεντρικό υπολογιστή ή άλλο απομακρυσμένο μηχάνημα στο LAN σας, εκτελέστε την παρακάτω εντολή στη γραμμή εντολών του τερματικού κεντρικού υπολογιστή σας :

# docker run -d -p 81:80 ubuntu-apache

Εδώ, η επιλογή -d εκτελεί το κοντέινερ ubuntu-apache στο παρασκήνιο (ως δαίμονας) και η επιλογή -p αντιστοιχίζει τη θύρα κοντέινερ 80 στη θύρα localhost σας 81. Η πρόσβαση στο εξωτερικό LAN στην υπηρεσία Apache είναι δυνατή μόνο μέσω της θύρας 81.

Η εντολή Netstat θα σας δώσει μια ιδέα για το ποιες θύρες ακούει ο κεντρικός υπολογιστής.

Μετά την εκκίνηση του κοντέινερ, μπορείτε επίσης να εκτελέσετε την εντολή docker ps για να δείτε την κατάσταση του κοντέινερ που εκτελείται.

6. Η ιστοσελίδα μπορεί να εμφανιστεί στον κεντρικό υπολογιστή σας από τη γραμμή εντολών χρησιμοποιώντας το βοηθητικό πρόγραμμα curl σε σχέση με τη διεύθυνση IP του υπολογιστή σας, τον localhost ή τη διεπαφή δικτύου docker στη θύρα 81. Χρησιμοποιήστε την εντολή IP γραμμή για εμφάνιση διευθύνσεων IP διεπαφής δικτύου.

# ip addr               [List nework interfaces]
# curl ip-address:81    [System Docker IP Address]
# curl localhost:81     [Localhost]

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

http://ip-address:81

8. Για να δείτε ποιες διεργασίες εκτελούνται μέσα στο κοντέινερ, εκδώστε την ακόλουθη εντολή:

# docker ps
# docker top <name or ID of the container>

9. Για να σταματήσετε το πρόβλημα του κοντέινερ, η εντολή docker stop ακολουθούμενη από το αναγνωριστικό κοντέινερ ή το όνομα.

# docker stop <name or ID of the container>
# docker ps

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

# docker run --name my-www -d -p 81:80 ubuntu-apache
# docker ps

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

# docker stats my-www

Βήμα 3: Δημιουργήστε ένα αρχείο διαμόρφωσης σε όλο το σύστημα για το Docker Container

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

Για παράδειγμα, δημιουργήστε ένα νέο αρχείο systemd με το όνομα, ας πούμε, apache-docker.service χρησιμοποιώντας την ακόλουθη εντολή:

# vi /etc/systemd/system/apache-docker.service

Απόσπασμα αρχείου apache-docker.service:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

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

# systemctl daemon-reload
# systemctl start apache-docker.service
# systemctl status apache-docker.service

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

Περαιτέρω ανάγνωση: