Μια πρακτική εισαγωγή στο Docker Compose

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

Από τις μυριάδες δυνατότητες ήταν η δυνατότητα εφαρμογής σύνθετων τεχνολογικών στοιβών για τις εφαρμογές μας, οι οποίες προηγουμένως θα ήταν το πεδίο των ειδικών. Σήμερα, με τη βοήθεια μηχανικών λογισμικού εμπορευματοκιβωτίων με καλή κατανόηση των υποκείμενων συστημάτων μπορούν να εφαρμόσουν μια πολύπλοκη στοίβα και γιατί όχι είναι η ανάγκη της ώρας, η φιγούρα «Jack of all trades» πήρε μια φανταστική αναβάθμιση. "Master of some" με βάση τις ανάγκες της εποχής. Με απλά λόγια, οι δεξιότητες σε σχήμα «Τ».

Η δυνατότητα καθορισμού μιας πολύπλοκης στοίβας σε ένα αρχείο και της εκτέλεσης με μία μόνο εντολή, αρκετά δελεαστικό. Τα παιδιά της Docker Inc. επιλέγουν να το ονομάσουν Docker compose.

Σε αυτό το άρθρο, θα χρησιμοποιήσουμε το παράδειγμα Voting App του Docker και θα το αναπτύξουμε χρησιμοποιώντας το Docker compose.

Σύνθεση Docker

Σύμφωνα με τα λόγια της Docker Inc.

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

Η εφαρμογή ψηφοφορίας

Παρουσιάζοντας την πιο αγαπημένη εφαρμογή επίδειξης για την κοινότητα Docker "The Voting App", σαν να χρειάζεται καθόλου εισαγωγή. Πρόκειται για μια απλή εφαρμογή βασισμένη στην αρχιτεκτονική μικρο-υπηρεσιών, που αποτελείται από 5 απλές υπηρεσίες.

  1. Voting-App : Frontend της εφαρμογής που γράφτηκε στο Python, που χρησιμοποιείται από τους χρήστες για να ψηφίσουν.
  2. Redis : Βάση δεδομένων στη μνήμη, που χρησιμοποιείται ως ενδιάμεσος χώρος αποθήκευσης.
  3. Εργαζόμενος :. Καθαρή υπηρεσία, χρησιμοποιείται για τη λήψη ψήφων από το Redis και την αποθήκευση στη βάση δεδομένων Postres.
  4. DB : Βάση δεδομένων PostgreSQL, που χρησιμοποιείται ως βάση δεδομένων.
  5. Αποτέλεσμα-Εφαρμογή : Η διεπαφή της εφαρμογής που γράφτηκε στο Node.js, εμφανίζει τα αποτελέσματα των ψηφοφοριών

Το Voting repo έχει ένα αρχείο που ονομάζεται docker-compose.ymlαυτό το αρχείο περιέχει τη διαμόρφωση για τη δημιουργία των κοντέινερ, την έκθεση θυρών, τη δέσμευση τόμων και τη σύνδεση κοντέινερ μέσω δικτύων που απαιτούνται για να λειτουργήσει η εφαρμογή ψηφοφορίας. Ακούγεται σαν πολύ μεγάλο docker runκαι docker network createδιατάζει διαφορετικά, η σύνταξη του docker μας επιτρέπει να βάζουμε όλα αυτά τα πράγματα σε ένα μόνο αρχείο σύνθεσης docker σε μορφή yaml.

version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker depends_on: - "redis" networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:

Git cloneκαι cdστο repo της εφαρμογής ψηφοφορίας.

dockersamples / app-voting-app

example- vote -app - Παράδειγμα Docker Compose app github.com

Σύνθεση χρόνου

Με όλη την εφαρμογή μας που ορίζεται σε ένα αρχείο σύνθεσης, μπορούμε να ανακουφίσουμε, να χαλαρώσουμε και απλώς να εκτελέσουμε την εφαρμογή. Η ομορφιά της σύνθεσης έγκειται στο γεγονός ότι μία εντολή δημιουργεί όλες τις υπηρεσίες, συνδέει τα δίκτυα (κυριολεκτικά), προσαρμόζει όλους τους τόμους και εκθέτει τις θύρες. Ήρθε η ώρα να καλωσορίσετε την upεντολή, εκτελεί όλες τις προαναφερθείσες εργασίες. $ Docker-compose up

Μετά από πολλά "Pull complete", εκατοντάδες megabyte και λίγα λεπτά (ίσως περισσότερα). . .

Voila, έχουμε την εφαρμογή ψηφοφορίας σε λειτουργία.

Η εντολή docker psπαραθέτει όλα τα κοντέινερ που εκτελούνται

$ docker ps -a --format="table {{.Names}}\t{{.Image}}\t{{.Ports}}" NAMES IMAGE PORTS voting_worker_1 voting_worker db postgres:9.4 5432/tcp voting_vote_1 voting_vote 0.0.0.0:5000->80/tcp voting_result_1 voting_result 0.0.0.0:5858->5858/tcp, 0.0.0.0:5001->80/tcp redis redis:alpine 0.0.0.0:32768->6379/tcp

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

Μπορείτε να έχετε πρόσβαση στην εφαρμογή Ψηφοφορία στο // localhost: 5000

Ομοίως, η εφαρμογή αποτελεσμάτων ψηφοφορίας είναι προσβάσιμη στο // localhost: 5001

Κάθε ψηφοφορία στην εφαρμογή Ψηφοφορία αποθηκεύεται πρώτα στη βάση δεδομένων στη μνήμη Redis, η υπηρεσία .Net εργαζόμενος παίρνει την ψήφο και την αποθηκεύει στο Postgres DB στο οποίο έχει πρόσβαση το frontend του Node.js.

Σύνθεση χαρακτηριστικών

Το Compose παρέχει την ευελιξία στη χρήση ενός ονόματος έργου για την απομόνωση των περιβαλλόντων μεταξύ τους, το όνομα του έργου είναι το βασικό όνομα του καταλόγου που περιέχει το έργο. Στην εφαρμογή ψηφοφορίας μας αυτό υποδηλώνεται από το όνομα των κοντέινερ voting_worker_1όπου votingείναι το βασικό όνομα του καταλόγου. Μπορούμε να ορίσουμε ένα προσαρμοσμένο όνομα έργου χρησιμοποιώντας τη -pσημαία ακολουθούμενο από το προσαρμοσμένο όνομα.

Το Compose διατηρεί όλους τους τόμους που χρησιμοποιούνται από τις υπηρεσίες που ορίζονται στο αρχείο σύνταξης, επομένως δεν χάνονται δεδομένα κατά την αναδημιουργία των κοντέινερ docker-compose up. Ένα άλλο δροσερό χαρακτηριστικό είναι ότι μόνο τα δοχεία που έχουν αλλάξει αναδημιουργούνται, τα δοχεία των οποίων η κατάσταση δεν άλλαξε παραμένουν ανέγγιχτα.

Ένα άλλο δροσερό χαρακτηριστικό είναι η υποστήριξη μεταβλητών στο αρχείο σύνταξης, μπορούμε να ορίσουμε μεταβλητές σε ένα .envαρχείο και να τις χρησιμοποιήσουμε στο αρχείο σύνθεσης. Εδώ POSTGRES_VERSION=9.4μπορεί να οριστεί στο αρχείο περιβάλλοντος ή να οριστεί στο κέλυφος. Χρησιμοποιείται στο αρχείο σύνθεσης με τον ακόλουθο τρόπο:

db: image: "postgres:${POSTGRES_VERSION}"

Φύλλο εντολής εξαπάτησης

Είναι εύκολο να ξεκινήσεις, να σταματήσεις και να παίζεις με σύνθεση.

$ docker-compose up -d $ docker-compose down $ docker-compose start $ docker-compose stop $ docker-compose build $ docker-compose logs -f db $ docker-compose scale db=4 $ docker-compose events $ docker-compose exec db bash

Περίληψη

Το Docker Compose είναι ένα εξαιρετικό εργαλείο για γρήγορη ανάπτυξη και απόρριψη κοντέινερ, το αρχείο σύνταξης μπορεί να εκτελείται απρόσκοπτα σε οποιοδήποτε μηχάνημα εγκατεστημένο με βάση σύνδεσης. Ο πειραματισμός και οι τεχνολογίες μάθησης απέχουν μόνο ένα αρχείο σύνθεσης.).

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