Από τη στιγμή που παρατήρησα ότι η εφαρμογή που ετοιμάσαμε έχει επεκταθεί σημαντικά, αποφάσισα να βρω μια εντελώς νέα μέθοδο για την αυτοματοποίηση της διαδικασίας εκκίνησής της. Ήταν σημαντικό για μένα να βρω μια λύση που θα επέτρεπε την ενεργοποίηση νέων χαρακτηριστικών μεμονωμένα.
Εισαγωγή
Η ανακάλυψη μιας απλούστερης μεθόδου αυτοματοποίησης διαδικασιών θα αποτελούσε σημαντική βελτίωση της εργασίας μου, καθώς και της εργασίας ολόκληρης της εταιρείας μου. ομάδα. Σκέφτηκα "Γιατί να μην χρησιμοποιήσω το Docker;"
Κατά το στάδιο της προετοιμασίας, δημιούργησα δύο ρυθμίσεις: μία για την front-end εφαρμογή και μία για το API. Παρακάτω μπορείτε να δείτε μια παρουσίαση των όσων έμαθα κατά τη διάρκεια της διαδικασίας ανάπτυξης.
Το πρώτο πρόβλημα
Θέλω να έχω ένα κλωνοποιημένο αποθετήριο στο κοντέινερ, οπότε πρόσθεσα ένα κλειδί ssh μέσω της εντολής ADD στο Dockerfile:
ADD ~/.ssh/testowy
Και μπαμ! Το αρχείο δεν βρέθηκε. Γιατί;
Ας υποθέσουμε ότι έχουμε την ακόλουθη δομή φακέλων:
docker/
|-- stuff/
| |-- test.txt
|-- Dockerfile
server/
|-- data
| |-- setup.yml
Εκτέλεση εντολής χτίσει
στο login-queue
και μπορείτε να προσθέσετε μόνο αρχεία από τον τοπικό φάκελο και τους τοπικούς υποφακέλους του, π.χ. stuff.
Αν θέλετε να προσθέσετε το διακομιστής
θα λάβετε ένα μήνυμα: "αδυναμία προετοιμασίας πλαισίου"
Dockerignore
Αναρωτηθήκατε ποτέ γιατί η εικόνα αργεί τόσο πολύ να δημιουργηθεί; Ίσως δεν χρησιμοποιήσατε .dockerignore
, για να αγνοήσετε αρχεία που δεν είναι απαραίτητα στην εικόνα. Το .git
θα πρέπει να αφαιρεθεί αυτόματα, καθώς και όλα τα προσωρινά αρχεία.
Σειρά εντολών στο αρχείο Docker
Το Docker αποθηκεύει κάθε γραμμή σε μορφή αρχείου Docker και μετά την κατασκευή κάθε γραμμή αποθηκεύεται ως στρώμα. Είναι πολύ σημαντικό να μην αλλάζετε τη σειρά συγκεκριμένων εντολών πολύ συχνά.
ΑΠΟ το ubuntu
ΤΡΕΞΤΕ το apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]
Για παράδειγμα, αν αλλάξετε την τελευταία γραμμή στο Dockerfile, όλες οι προηγούμενες γραμμές θα μεταφορτωθούν από την προσωρινή μνήμη, ενώ η τελευταία γραμμή θα τροποποιηθεί. Όταν αντικαταστήσετε τη γραμμή Νο 4, τότε θα τροποποιηθούν όλες οι γραμμές που ξεκινούν από τη γραμμή 4 μέχρι το τέλος. Για το λόγο αυτό αξίζει να τοποθετείτε εντολές που δεν θα αλλάξουν, στην αρχή του αρχείου.
Αντιγραφή αρχείων σε εικόνα
Αξίζει να σκεφτείτε για ποιο λόγο θα χρησιμοποιηθεί μια συγκεκριμένη εικόνα. Αν την χρειάζεστε για να εκκινήσετε μια υπηρεσία μία φορά, απλά αντιγράψτε το κωδικός περιεχόμενο απευθείας στην εικόνα:
ΑΝΤΙΓΡΑΦΟ . /workdir
Δυστυχώς, αυτό καθιστά αδύνατη την επεξεργασία αρχείων και κάθε φορά που θέλετε να επεξεργαστείτε τον κώδικά σας, θα πρέπει να δημιουργήσετε ξανά την εικόνα.
Αν χρησιμοποιείτε MacOS και θέλετε να χρησιμοποιήσετε την ενσωματωμένη εικόνα για ανάπτυξη, πρέπει να προσεγγίσετε το θέμα με ελαφρώς διαφορετικό τρόπο. Αν θα χρησιμοποιήσετε τόμους, τότε θα πρέπει να είστε προετοιμασμένοι ότι πρόκειται για μια εξαιρετικά αργή λύση (π.χ. η αντιγραφή ενός αρχείου από τον κεντρικό υπολογιστή στο δοχείο γίνεται με ταχύτητα 4,5 MB/s, ενώ η αντιγραφή εσωτερικά στο δοχείο με ταχύτητα 10-20 φορές μεγαλύτερη). Ευτυχώς, όπως μπορείτε να δείτε στο σύνδεσμος, το πρόβλημα είναι γνωστό και η επίλυσή του είναι το βασικό ζήτημα για την ομάδα που είναι υπεύθυνη για την ανάπτυξη του Docker για Mac.
Πώς μπορείτε να χρησιμοποιήσετε το Docker για ανάπτυξη σε αυτή την περίπτωση;
Μπορείτε να το χρησιμοποιήσετε για εξωτερικές υπηρεσίες, π.χ. Redis/PSQL/Elasticsearch ή να χρησιμοποιήσετε έτοιμες λύσεις που προσφέρουν rsync: https://github.com/brikis98/docker-osx-dev
Συνοψίζοντας
Αν έχετε μια μεγάλη ομάδα και θέλετε να δοκιμάσετε ένα νέο χαρακτηριστικό, το docker θα είναι το ιδανικό εργαλείο! Παρ' όλα αυτά, θα το χρησιμοποιούσα για την έναρξη παραγωγής ενός διακομιστή; Δεν έχω πειστεί πλήρως ακόμα...
Επιπλέον, συνιστώ μερικά εξαιρετικά άρθρα: