Docker 101 - So gelangen Sie von der Erstellung zur Bereitstellung

Docker ist ein Game-Changer und hat die Welt der Anwendungsentwicklung stark verändert. Lernen Sie die entscheidenden Fähigkeiten, die Sie heute für die Arbeit mit dieser Containertechnologie benötigen.

Was ist Docker?

In einfachen Worten, Docker ist ein Tool, mit dem Entwickler Anwendungen in Containern erstellen, bereitstellen und ausführen können. Containerisierung ist die Verwendung von Linux-Containern zum Bereitstellen von Anwendungen.

Warum ist Docker so großartig und warum sollten wir uns als Entwickler überhaupt die Mühe machen, es zu lernen?

GrundErläuterung
FlexibelSelbst die komplexesten Anwendungen können containerisiert werden.
LeichtContainer nutzen und teilen den Host-Kernel.
AustauschbarSie können Updates und Upgrades im laufenden Betrieb bereitstellen.
tragbarSie können lokal erstellen, in der Cloud bereitstellen und überall ausführen.
SkalierbarSie können Container-Replikate erhöhen und automatisch verteilen.
StapelbarSie können Dienste vertikal und im laufenden Betrieb stapeln.

Nachdem wir nun wissen, warum Docker so wichtig ist, lassen wir es auf unserem lokalen Computer installieren.

Eröffnen Sie ein Konto bei Docker Hub und laden Sie die kostenlose Docker Desktop-Anwendung herunter.

Wie unterscheidet sich Docker von herkömmlichen virtuellen Maschinen?

Ein Container läuft nativ unter Linux und teilt den Kernel des Hostcomputers mit anderen Containern. Es wird als diskreter Prozess ausgeführt und benötigt nicht mehr Speicher als jede andere ausführbare Datei, was bedeutet, dass es sehr leicht ist.

Im Gegensatz dazu führt eine virtuelle Maschine (VM) ein vollwertiges Gastbetriebssystem mit virtuellem Zugriff auf Hostressourcen über einen Hypervisor aus. Im Allgemeinen bieten VMs eine Umgebung mit mehr Ressourcen als die meisten Anwendungen benötigen.

Wenn Sie mit Docker arbeiten, definiert eine Docker-Datei, was in der Umgebung in Ihrem Container vor sich geht. Der Zugriff auf Ressourcen wie Netzwerkschnittstellen und Festplatten wird in dieser Umgebung virtualisiert, die vom Rest Ihres Systems isoliert ist. Dies bedeutet, dass Sie Ports der Außenwelt zuordnen und genau angeben müssen, welche Dateien Sie in diese Umgebung „kopieren“ möchten. Danach können Sie jedoch davon ausgehen, dass sich der in dieser Docker-Datei definierte Build Ihrer App überall dort genau gleich verhält, wo sie ausgeführt wird.

Docker-Befehle

Führen Sie den folgenden Befehl aus, um zu testen, ob eine Docker-Version ausgeführt wird:

docker --version

Führen Sie das einfache Docker- Hallo-Welt- Image aus , um zu testen, ob Ihre Installation einwandfrei funktioniert :

docker run hello-world

Wenn alles richtig eingerichtet ist, sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

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. ... 

Um das zu sehen Hallo-Welt Docker Bild , das auf Ihren Computer heruntergeladen wurde, verwenden Sie das Docker Bild Listing - Befehl:

docker image ls

Genial! Sie haben bereits begonnen, containerisierte Anwendungen mit Docker zu entwickeln. Hier sind einige hilfreiche grundlegende Docker-Befehle:

## 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 
Durch die Containerisierung wird CI / CD nahtlos. Zum Beispiel:
  • Anwendungen haben keine Systemabhängigkeiten
  • Updates können auf jeden Teil einer verteilten Anwendung übertragen werden
  • Die Ressourcendichte kann optimiert werden.
  • Mit Docker müssen Sie beim Skalieren Ihrer Anwendung neue ausführbare Dateien hochfahren und keine schweren VM-Hosts ausführen.

Lassen Sie uns mit Docker eine Node.js-Webanwendung erstellen

Als erstes erstellen wir eine package.jsonDatei. Wir können dies schnell tun, indem wir einfach den folgenden Befehl ausführen:

npm init -y 

Dadurch wird die obige Datei mit bestimmten wichtigen Feldern erstellt, die bereits ausgefüllt oder leer gelassen wurden.

Ihre Datei sollte ungefähr so ​​aussehen:

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

Als nächstes installieren wir express.js, was laut der offiziellen Website ein " schnelles, unopinioniertes, minimalistisches Webframework für Node.js " ist.

Dazu führen wir den folgenden Befehl in einem Terminal aus:

npm install express --save 

Der obige Befehl fügt das express.jsFramework zu unserer Anwendung hinzu, wobei das Flag --save als Anweisung für die Anwendung dient, die express.jsals Abhängigkeit verwendet werden soll.

Gehen Sie nun zu Ihrem package.jsonund ändern Sie das "main": "index.js"Schlüssel-Wert-Paar wie folgt:

"main": "app.js" 

Erstellen Sie als Nächstes eine .gitignoreDatei mit dem folgenden Befehl:

touch .gitignore 

Fügen Sie dann die folgende Zeile hinzu:

node_modules/ 

Dadurch wird verhindert, dass der für die node.jsEntwicklung wichtige Ordner node_modules von verfolgt wird git.

Fügen Sie nun den folgenden Code zur app.jsDatei hinzu:

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}`);

Führen Sie den folgenden Befehl im Anwendungsordner aus, damit dies auf Ihrem lokalen Computer ausgeführt wird:

npm start 

Sie finden die Anwendung unter //0.0.0.0:8080/

Genial!

Congratulations

Herzlichen Glückwunsch zum Weiterkommen

In die Dockerverse

Erstellen Sie nun ein Dockerfilemit folgendem Befehl:

touch Dockerfile 

Fügen Sie dann den folgenden Code hinzu:

# 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" ] 

Die obigen Kommentare versuchen zu erklären, was jeder DockerfileBefehl tut.

Fügen Sie außerdem eine dockerignoreDatei hinzu, um die Containerisierung bestimmter Komponenten der Anwendung zu verhindern.

Fügen Sie dies in die dockerignoreDatei ein:

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

Bereitstellen

Dies ist der Name, den Sie Ihrer Docker-App zuweisen, und ist im Wesentlichen nur eine Versionsanzeige für Ihr Docker-Image.

  • docker build -t image-name:tag .

Führen Sie dies aus, um von Ihrem Terminal aus auf Ihr Docker-Konto zuzugreifen.

  • docker login

Erstellen Sie ein Repository in Docker Hub.

Tag for upload to registry.

  • docker tag username/repository:tag

Upload the tagged image to the registry.

  • docker push username/repository:tag

Run the deployed Docker container on your local machine by connecting its PORTS. Target the exposed 8080 port, and assign it to port 10203 on your machine.

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

That's it! You have built and deployed a containerised Node.js web application.

All the code above can be found in this Github repository.

Originally posted here on blog.ninte.dev