Docker 101 - πώς μπορείτε να ξεκινήσετε από τη δημιουργία έως την ανάπτυξη

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

Τι είναι το Docker;

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

Γιατί λοιπόν το Docker είναι τόσο σπουδαίο και γιατί εμείς ως προγραμματιστές πρέπει να τον ενοχλούμε;

Λόγος Εξήγηση
Εύκαμπτος Ακόμη και οι πιο περίπλοκες εφαρμογές μπορούν να περιέχονται σε εμπορευματοκιβώτια.
Πυγμάχος ελαφρού βάρους Τα κοντέινερ χρησιμοποιούν και μοιράζονται τον κεντρικό πυρήνα.
Ανταλλάξιμος Μπορείτε να αναπτύξετε ενημερώσεις και αναβαθμίσεις εν κινήσει.
Φορητός Μπορείτε να δημιουργήσετε τοπικά, να αναπτύξετε στο cloud και να εκτελέσετε οπουδήποτε.
Κλιμακούμενος Μπορείτε να αυξήσετε και να διανείμετε αυτόματα αντίγραφα κοντέινερ.
Στοίβαγμα Μπορείτε να στοιβάζετε υπηρεσίες κάθετα και εν κινήσει.

Τώρα που γνωρίζουμε γιατί το Docker είναι τόσο μεγάλο, ας το εγκαταστήσουμε στον τοπικό μας υπολογιστή.

Εγγραφείτε για λογαριασμό στο Docker Hub και κατεβάστε τη δωρεάν εφαρμογή Docker Desktop.

Πώς διαφέρει το Docker από τις παραδοσιακές εικονικές μηχανές;

Ένα κοντέινερ εκτελείται εγγενώς σε Linux και μοιράζεται τον πυρήνα του κεντρικού υπολογιστή με άλλα κοντέινερ. Λειτουργεί ως μια διακριτή διαδικασία, δεν παίρνει περισσότερη μνήμη από οποιαδήποτε άλλη εκτελέσιμη έννοια που σημαίνει ότι είναι πολύ ελαφρύ.

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

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

Εντολές Docker

Για να ελέγξετε ότι διαθέτετε μια τρέχουσα έκδοση του Docker, εκτελέστε την ακόλουθη εντολή:

docker --version

Για να ελέγξετε ότι η εγκατάστασή σας λειτουργεί τέλεια, δοκιμάστε να εκτελέσετε την απλή εικόνα του Docker hello-world :

docker run hello-world

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

Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ... 

Για να δείτε το hello-world Docker που κατεβάστηκε στον υπολογιστή σας, χρησιμοποιήστε την εντολή καταχώρισης εικόνας Docker:

docker image ls

Φοβερός! Έχετε ήδη ξεκινήσει να αναπτύσσετε εφαρμογές με κοντέινερ με το Docker. Ακολουθούν μερικές χρήσιμες βασικές εντολές Docker:

## List Docker CLI commands docker docker container --help ## Display Docker version and info docker --version docker version docker info ## Execute Docker image docker run hello-world ## List Docker images docker image ls ## List Docker containers (running, all, all in quiet mode) docker container ls docker container ls --all docker container ls -aq 
Η κονσερβοποίηση κάνει το CI / CD απρόσκοπτη. Για παράδειγμα:
  • οι εφαρμογές δεν έχουν εξαρτήσεις συστήματος
  • ενημερώσεις μπορούν να προωθηθούν σε οποιοδήποτε μέρος μιας κατανεμημένης εφαρμογής
  • Η πυκνότητα πόρων μπορεί να βελτιστοποιηθεί.
  • Με το Docker, η κλιμάκωση της εφαρμογής σας είναι θέμα περιστροφής νέων εκτελέσιμων και όχι εκτέλεσης βαρέων κεντρικών υπολογιστών VM.

Ας δημιουργήσουμε μια εφαρμογή ιστού Node.js χρησιμοποιώντας το Docker

Το πρώτο πράγμα που κάνουμε είναι να δημιουργήσουμε ένα package.jsonαρχείο. Μπορούμε να το κάνουμε γρήγορα εκτελώντας απλώς την ακόλουθη εντολή:

npm init -y 

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

Το αρχείο σας πρέπει να μοιάζει με αυτό:

{ "name": "app-name", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } 

Στη συνέχεια, εγκαθιστούμε express.js, το οποίο σύμφωνα με τον επίσημο ιστότοπο, είναι ένα " Γρήγορο, μη γνωστό, μινιμαλιστικό πλαίσιο ιστού για το Node.js "

Αυτό το κάνουμε εκτελώντας την ακόλουθη εντολή σε ένα τερματικό:

npm install express --save 

Η παραπάνω εντολή προσθέτει το express.jsπλαίσιο στην εφαρμογή μας, με τη σημαία --save να λειτουργεί ως οδηγία στην εφαρμογή για χρήση express.jsως εξάρτηση.

Τώρα, μεταβείτε στο δικό σας package.jsonκαι αλλάξτε το "main": "index.js"ζεύγος κλειδιού-τιμής ως εξής:

"main": "app.js" 

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

touch .gitignore 

Στη συνέχεια, προσθέστε την ακόλουθη γραμμή:

node_modules/ 

Αυτό αποτρέπει τον εντοπισμό του φακέλου node_modules που είναι απαραίτητος για την node.jsανάπτυξη git.

Τώρα προσθέστε τον ακόλουθο κώδικα στο app.jsαρχείο:

const express = require('express'); const app = express(); const PORT = 8080; const HOST = '0.0.0.0'; app.get('/', (req, res) => { res.send( ` 

Home

Docker is awesome!

Next Page ` ) }); app.get('/more', (req, res) => { res.send( `

Page Two

Node.js is pretty great too!!

Back Home ` ) }); app.listen(PORT, HOST); console.log(`Running on //${HOST}:${PORT}`);

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

npm start 

Θα βρείτε την εφαρμογή σε λειτουργία //0.0.0.0:8080/

Φοβερός!

Συγχαρητήρια

Συγχαρητήρια για την επιτυχία σας

Μέσα στο Dockerverse

Τώρα δημιουργήστε ένα Dockerfileμε την ακόλουθη εντολή:

touch Dockerfile 

Στη συνέχεια, προσθέστε τον ακόλουθο κωδικό:

# An official Docker image for Node.js FROM node:10-alpine # Working directory for the containerised application WORKDIR /src/app # This copies significant package.json files to the current directory COPY package*.json ./ # Install essential Node.js dependencies RUN npm install COPY . . # Opens up this port on the Docker container EXPOSE 8080 # This starts the Docker application CMD [ "npm", "start" ] 

Τα παραπάνω σχόλια προσπαθούν να εξηγήσουν τι κάνει κάθε Dockerfileεντολή.

Επίσης, προσθέστε ένα dockerignoreαρχείο για να αποτρέψετε τον περιορισμό ορισμένων στοιχείων της εφαρμογής.

Τοποθετήστε το στο εσωτερικό του dockerignoreαρχείου:

node_modules npm-debug.log Dockerfile* docker-compose* .dockerignore .git .gitignore README.md LICENSE 

Τρόπος ανάπτυξης

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

  • docker build -t image-name:tag .

Εκτελέστε αυτό για να αποκτήσετε πρόσβαση στον λογαριασμό σας στο Docker από το τερματικό σας.

  • docker login

Δημιουργήστε ένα αποθετήριο στο Docker Hub.

Ετικέτα για μεταφόρτωση στο μητρώο.

  • docker tag username/repository:tag

Ανεβάστε την ετικέτα με εικόνα στο μητρώο.

  • docker push username/repository:tag

Εκτελέστε το αναπτυγμένο κοντέινερ Docker στον τοπικό υπολογιστή σας συνδέοντας τα PORTS του. Στοχεύστε την εκτεθειμένη θύρα 8080 και αντιστοιχίστε τη στη θύρα 10203 στο μηχάνημά σας.

  • docker run -p 10203:8080 username/repository:tag

Αυτό είναι! Έχετε δημιουργήσει και αναπτύξει μια εφαρμογή web Node.js με κοντέινερ.

Όλος ο παραπάνω κώδικας μπορεί να βρεθεί σε αυτό το αποθετήριο Github.

Αρχικά δημοσιεύτηκε εδώ στο blog.ninte.dev