Android

Πώς να δημιουργήσετε εικόνες docker με dockerfile

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

Contain Yourself: An Intro to Docker and Containers by Nicola Kabar and Mano Marks

Πίνακας περιεχομένων:

Anonim

Μια εικόνα Docker είναι το σχέδιο των δοχείων Docker που περιέχει την εφαρμογή και όλα όσα χρειάζεστε για να εκτελέσετε την εφαρμογή. Ένα κοντέινερ είναι μια στιγμή εκτέλεσης μιας εικόνας.

Σε αυτό το σεμινάριο, θα εξηγήσουμε τι είναι το Dockerfile, πώς να το δημιουργήσετε και πώς να δημιουργήσετε μια εικόνα Docker με το Dockerfile.

Τι είναι το Dockerfile

Ένα Dockerfile είναι ένα αρχείο κειμένου που περιέχει όλες τις εντολές που μπορεί να εκτελέσει ένας χρήστης στη γραμμή εντολών για να δημιουργήσει μια εικόνα. Περιλαμβάνει όλες τις οδηγίες που χρειάζεται το Docker για να δημιουργήσει την εικόνα.

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

Το αρχείο Docker έχει την ακόλουθη μορφή:

# Comment INSTRUCTION arguments

INSTRUCTION δεν γίνεται INSTRUCTION πεζών-κεφαλαίων, αλλά η σύμβαση είναι να χρησιμοποιήσετε το UPPERCASE για τα ονόματά της.

Παρακάτω είναι η λίστα με μια σύντομη περιγραφή μερικών από τις πιο χρησιμοποιούμενες οδηγίες Dockerfile:

  • ARG - Αυτή η εντολή σάς επιτρέπει να ορίσετε μεταβλητές που μπορούν να μεταβιβαστούν κατά την κατασκευή χρόνου. Μπορείτε επίσης να ορίσετε μια προεπιλεγμένη τιμή. FROM - Η εικόνα βάσης για την οικοδόμηση μιας νέας εικόνας. Αυτή η εντολή πρέπει να είναι η πρώτη οδηγία χωρίς σχόλια στο αρχείο Docker. Η μόνη εξαίρεση από αυτόν τον κανόνα είναι όταν θέλετε να χρησιμοποιήσετε μια μεταβλητή στο όρισμα FROM . Σε αυτήν την περίπτωση, FROM μπορεί να προηγηθεί μία ή περισσότερες οδηγίες ARG . LABEL - Χρησιμοποιείται για την προσθήκη μεταδεδομένων σε μια εικόνα, όπως περιγραφή, έκδοση, συγγραφέας..etc. Μπορείτε να ορίσετε περισσότερες από μία LABEL και κάθε εντολή LABEL είναι ένα ζευγάρι κλειδιού-τιμής. RUN - Οι εντολές που καθορίζονται σε αυτή την εντολή θα εκτελούνται κατά τη διάρκεια της διαδικασίας δημιουργίας. Κάθε εντολή RUN δημιουργεί ένα νέο στρώμα πάνω από την τρέχουσα εικόνα. ADD - Χρησιμοποιείται για την αντιγραφή αρχείων και καταλόγων από την καθορισμένη πηγή στον καθορισμένο προορισμό στην εικόνα του docker. Η πηγή μπορεί να είναι τοπικά αρχεία ή κατάλογοι ή μια διεύθυνση URL. Εάν η πηγή είναι ένα τοπικό αρχείο tar, τότε αυτόματα αποσυσκευάζεται στην εικόνα του Docker. COPY - Παρόμοια με την ADD αλλά η πηγή μπορεί να είναι μόνο τοπικό αρχείο ή κατάλογος. ENV - Αυτή η εντολή σάς επιτρέπει να ορίσετε μια μεταβλητή περιβάλλοντος. CMD - Χρησιμοποιείται για να καθορίσετε μια εντολή που θα εκτελεστεί όταν εκτελείτε ένα κοντέινερ. Μπορείτε να χρησιμοποιήσετε μόνο μία οδηγία CMD στο αρχείο Docker. ENTRYPOINT - Παρόμοια με την CMD , αυτή η εντολή καθορίζει ποια εντολή θα εκτελεστεί κατά την εκτέλεση ενός κοντέινερ. WORKDIR - Αυτή η οδηγία ορίζει τον τρέχοντα κατάλογο εργασίας για τις οδηγίες RUN , CMD , ENTRYPOINT , COPY και ADD . USER - Ορίστε το όνομα χρήστη ή το UID που χρησιμοποιείτε όταν εκτελείτε τις παρακάτω οδηγίες RUN , CMD , ENTRYPOINT , COPY και ADD . VOLUME - Σας επιτρέπει να συνδέσετε έναν κατάλογο μηχάνημα υποδοχής στο κοντέινερ. EXPOSE - Χρησιμοποιείται για να καθορίσετε τη θύρα στην οποία ακούγεται το δοχείο κατά το χρόνο εκτέλεσης.

Για να αποκλείσετε την προσθήκη αρχείων και καταλόγων στην εικόνα, δημιουργήστε ένα αρχείο .dockerignore στον κατάλογο περιεχομένων. Η σύνταξη του .dockerignore είναι παρόμοια με αυτή του αρχείου .gitignore του Git.

Για πλήρη αναφορά και λεπτομερή επεξήγηση των οδηγιών Dockerfile, ανατρέξτε στην επίσημη σελίδα αναφοράς Dockerfile.

Δημιουργήστε ένα αρχείο Docker

Το πιο συνηθισμένο σενάριο κατά τη δημιουργία εικόνων Docker είναι να τραβήξετε μια υπάρχουσα εικόνα από ένα μητρώο (συνήθως από το Docker Hub) και να καθορίσετε τις αλλαγές που θέλετε να κάνετε στην εικόνα βάσης. Η πιο συχνά χρησιμοποιούμενη εικόνα βάσης κατά τη δημιουργία εικόνων Docker είναι η Alpine επειδή είναι μικρή και βελτιστοποιηθεί για να τρέξει σε RAM.

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

Σε αυτό το παράδειγμα, θα δημιουργήσουμε μια εικόνα Docker για τον διακομιστή Redis. Θα χρησιμοποιήσουμε το τελευταίο ubuntu 18.04 ως βασική εικόνα.

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

mkdir ~/redis_docker

Πλοηγηθείτε στον κατάλογο και δημιουργήστε το ακόλουθο αρχείο Docker:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Ας εξηγήσουμε τη σημασία κάθε γραμμής στο Dockerfile:

  • Στη γραμμή 1 καθορίζουμε την εικόνα βάσης. Η εντολή RUN που ξεκινά στη γραμμή 3 θα ενημερώσει το ευρετήριο apt, θα εγκαταστήσει το πακέτο "redis-server" και θα καθαρίσει την cache apt. Οι εντολές που χρησιμοποιούνται στις οδηγίες είναι οι ίδιες με τις εντολές που θα χρησιμοποιούσατε για την εγκατάσταση του redis στον εξυπηρετητή Ubuntu. Η εντολή EXPOSE ορίζει τη θύρα στην οποία ακούγεται ο διακομιστής redis. Στην τελευταία γραμμή, χρησιμοποιούμε την εντολή CMD για να ορίσετε την προεπιλεγμένη εντολή που θα εκτελούνται όταν τρέχει το δοχείο.

Αποθηκεύστε το αρχείο και κλείστε τον επεξεργαστή.

Δημιουργία της εικόνας

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

docker build -t linuxize/redis.

Η επιλογή -t καθορίζει το όνομα της εικόνας και προαιρετικά ένα όνομα χρήστη και ετικέτα στη μορφή 'username / imagename: tag'.

Η έξοδος της διαδικασίας δημιουργίας θα φαίνεται κάπως έτσι:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Όταν ολοκληρωθεί η διαδικασία δημιουργίας, η νέα εικόνα θα εμφανίζεται στη λίστα εικόνων:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Εκτέλεση ενός κοντέινερ

Τώρα που δημιουργείται η εικόνα, τρέχετε ένα κοντέινερ από αυτήν εκτελώντας:

docker run -d -p 6379:6379 --name redis linuxize/redis

Οι επιλογές -d λένε στο Docker για να εκτελέσει το δοχείο σε αποσπασμένη λειτουργία, η επιλογή -p 6379:6379 θα δημοσιεύσει τη θύρα 6379 στο μηχάνημα κεντρικού υπολογιστή και η επιλογή --name redis καθορίζει το όνομα του κοντέινερ. Το τελευταίο όρισμα linuxize/redis είναι το όνομα της εικόνας, το οποίο χρησιμοποιείται για την εκτέλεση του κοντέινερ.

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

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Για να επαληθεύσετε ότι όλα λειτουργούν όπως θα έπρεπε να χρησιμοποιήσετε το redis-cli για να συνδεθείτε στο δοχείο docker:

redis-cli ping

Ο διακομιστής redis πρέπει να απαντήσει με PONG .

συμπέρασμα

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

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