Machen Sie sich ein Bild vom Docker-Container.
In der heutigen Technologiebranche ist “es funktioniert auf meinem System” eine sehr verbreitete Phrase unter Entwicklern. Aber es gibt viele Fälle, in denen die Anwendung, die auf dem System eines Entwicklers läuft, auf dem Rechner eines Testers oder auf einem Produktionsrechner nicht funktioniert, was zu Chaos führt.
Docker wurde eingeführt, um solche Probleme zu lösen. 💯
Warum Docker?
Lassen Sie mich Ihnen von meiner persönlichen Erfahrung erzählen, warum Docker so wichtig ist.
Ich habe mit meinem Team an einem Full-Stack-Projekt gearbeitet, bei dem ich eine Anwendung erstellen musste, die Angular im Frontend, Node.js im Backend und MySQL als Datenbank verwendet. Bei der Arbeit an dieser Anwendung, die mehrere Technologien verwendet, sind wir auf mehrere Probleme gestoßen.
- Das erste Problem war die Kompatibilität mit dem Betriebssystem. Da ich mehrere Technologien verwendet habe, musste ich sicherstellen, dass alle Technologien mit dem von mir verwendeten Betriebssystem kompatibel sind. Es gab Fälle, in denen die Angular-Version nicht mit der von mir verwendeten Betriebssystemversion funktionierte, so dass ich die Betriebssystemversion mehrfach ändern musste.
- Da sich die Architektur der Anwendung, die ich entwickelte, im Laufe der Zeit änderte, kam ich in Situationen, in denen die Versionen der Software und der Bibliotheken sowie die Abhängigkeiten aktualisiert werden mussten. Ich hatte mit vielen Kompatibilitätsproblemen zu kämpfen, bevor ich zu einer stabilen Version aller Technologien kam, die ich für meine Anwendung verwendete. Die Aktualisierung auch nur eines einzigen in meiner Anwendung verwendeten Tools war eine riskante Angelegenheit.
- Später arbeiteten mehr Entwickler an meiner Anwendung. Da der Technologiestapel sehr umfangreich war, mussten sie stundenlang mehrere Befehle ausführen, um ihre Umgebung einzurichten, die mit der Anwendung kompatibel war. Ich musste die Umgebung jedes Entwicklers überprüfen und bewerten, um sicherzustellen, dass es keine Abweichungen von der von mir verwendeten Technologieversion gab.
- Und wenn einer der Entwickler nicht mit dem Betriebssystem zurechtkam, das ich für die Entwicklung meiner Anwendung verwendete, war es für ihn/sie eine Herausforderung, an der Anwendung zu arbeiten.
All dies erschwerte die Entwicklung, den Aufbau und die rechtzeitige Auslieferung der Anwendung. An dieser Stelle kam Docker ins Spiel. Es löst alle Probleme, die ich gerade erwähnt habe.
Was ist Docker?
Docker ist eine Containerisierungsplattform, die die Anwendung und ihre Abhängigkeiten in einem Container verpackt, so dass die Anwendung in jeder Umgebung nahtlos funktioniert, sei es in der Entwicklungs-, Staging- oder Produktionsumgebung.
Es handelt sich um ein Tool, das die Erstellung, Bereitstellung und Ausführung von Anwendungen mit Hilfe von Containern vereinfachen soll. Docker-Container sind leichtgewichtige Alternativen zu virtuellen Maschinen und verwenden das Host-Betriebssystem. Sie müssen in Containern keinen Arbeitsspeicher im Voraus zuweisen, wie es bei virtuellen Maschinen der Fall ist.
Es handelt sich um eine Open-Source-Plattform für Entwickler, Systemadministratoren und Unternehmen, mit der sie verteilte Anwendungen erstellen, ausliefern und sofort ausführen können.
Um mehr darüber zu erfahren, wie Docker intern funktioniert, lesen Sie die Docker-Architektur.
Docker Images, Container, Dockerdatei
Docker-Image
Das Docker-Image ist eine Vorlage, die für die Ausführung einer Anwendung benötigt wird. Es besteht aus Anwendungscode, Bibliotheken, Tools, Abhängigkeiten usw.
Docker-Images sind unveränderliche, schreibgeschützte Dateien, die manchmal auch als Snapshots bezeichnet werden. Ein Docker-Image wird nicht gestartet oder ausgeführt, sondern Sie erstellen damit einen Container. Wenn ein Container aus einem Docker-Image erstellt wird, wird eine Container-Schicht über der Image-Schicht erstellt.
Es muss ein Basis-Docker-Image geben, das zur Erstellung mehrerer anderer Docker-Images mit einigen Änderungen am Basis-Image verwendet wird.
Docker Hub ist ein Repository von Docker-Images für fast alle Technologie-Stacks. Sie können ein Docker-Image von DockerHub abrufen und mit der Erstellung von Containern beginnen.
Docker-Container
Docker-Container sind ausführbare Softwarepakete, die alle für die Ausführung einer Anwendung erforderlichen Abhängigkeiten enthalten. Mit Docker-Containern können Anwendungen in verschiedenen Computerumgebungen effizient arbeiten.
Im Folgenden finden Sie die Merkmale von Docker Containern:
- Geringes Gewicht
- Minimaler Overhead (CPU/IO/Netzwerk)
- Schnellere Bereitstellung
- Leicht skalierbar
- Geringerer Speicherbedarf
- Tragbar, überall einsetzbar.
- Minimales Basis-OS
- Isolierung von Anwendungen
Dockerfile
Dockerfile ist ein Shell-Skript, das alle auszuführenden Aufgaben definiert. Aus einer Dockerdatei erstellen Sie ein Docker-Image; aus dem Docker-Image erstellen Sie einen Docker-Container.
Installation von Docker
Docker kann problemlos auf verschiedenen Linux-Plattformen, Windows oder macOS installiert werden. Lesen Sie diesen Beitrag über die Installation von Docker unter Ubuntu, CentOS, Debian und Windows.
Auch Docker Desktop ist für Windows- und Mac-Rechner verfügbar. Es handelt sich dabei um eine ausführbare Anwendung, die sehr einfach zu installieren ist und bei der Erstellung und Containerisierung von Anwendungen in Windows- und Mac-Umgebungen hilft.
Docker-Editionen und Preisgestaltung
Es gibt zwei Editionen von Docker:
- Gemeinschaftsausgabe (CE)
- Unternehmensausgabe (EE)
Die Community Edition von Docker ist quelloffen und kostenlos zu verwenden. Docker CE zielt auf einen “Do it yourself”-Ansatz ab, bei dem DevOps-Ingenieure ihre Anwendungen selbst containerisieren können.
Die Docker Enterprise Edition gibt es in drei Versionen – Basic, Standard und Advanced. Die Basisversion enthält eine Docker-Plattform, Support und Zertifizierung, während die Standard- und die erweiterte Version zusätzlich zu den Funktionen der Basisversion über Funktionen für die Container-Verwaltung und das Docker-Sicherheitsscanning verfügen.
Die meisten Techniker nutzen Docker kostenlos. Wenn Sie jedoch erweiterte Funktionen benötigen, können Sie die kostenpflichtige Version von Docker verwenden. Die Preise richten sich nach Funktionen wie Repository-Verwaltung, CI/CD-Funktionen, Benutzerverwaltung, Entwickler-Tools und Support-Optionen.
Im Folgenden finden Sie die Details zu den Tarifen von Docker:
Da Sie nun die Grundlagen von Docker kennen, möchte ich Ihnen ein sehr einfaches Docker-Beispiel zeigen.
Docker Hallo Welt Container
Ich werde ein Hello-World-Docker-Image von DockerHub ziehen und das Image bauen, um einen Docker-Container zu erstellen, auf dem die Anwendung ausgeführt wird. Dieses Image enthält eine einfache Anwendung, die eine Hallo-Nachricht von Docker aus druckt.
Als erstes muss ich das hello-world Docker-Image auf meinen Ubuntu-Rechner ziehen.
Hinweis: Dies setzt voraus, dass Docker bereits installiert ist. Falls noch nicht, sehen Sie sich die Installationsanleitung an.
geekflare@geekflare:~$ docker pull hello-world
Standard-Tag verwenden: latest
latest: Ziehen von library/hello-world
0e03bdcc26d7: Pull abgeschlossen
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Neueres Image für hello-world:latest heruntergeladen
Prüfen Sie, ob das Docker-Image gezogen wurde.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 vor 7 Monaten 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 Monate her 90.8MB
geekflare_mongodb latest 095d17727ca0 vor 12 Monaten 325MB
Führen Sie den folgenden Befehl aus, um einen Container zu erstellen und die Anwendung auszuführen.
geekflare@geekflare:~$ docker run hello-world
Hallo von Docker!
Diese Meldung zeigt, dass Ihre Installation korrekt zu funktionieren scheint.
Um diese Nachricht zu erzeugen, hat Docker die folgenden Schritte durchgeführt:
1. Der Docker-Client hat den Docker-Daemon kontaktiert.
2. Der Docker-Daemon zog das Image "hello-world" aus dem Docker Hub.
(amd64)
3. Der Docker-Daemon hat aus diesem Image einen neuen Container erstellt, in dem die
ausführbare Datei ausführt, die die Ausgabe erzeugt, die Sie gerade lesen.
4. Der Docker-Daemon leitete diese Ausgabe an den Docker-Client weiter, der sie
an Ihr Terminal sendet.
Um etwas Ehrgeizigeres auszuprobieren, können Sie einen Ubuntu-Container mit starten:
$ docker run -it ubuntu bash
Teilen Sie Images, automatisieren Sie Arbeitsabläufe und mehr mit einer kostenlosen Docker-ID:
https://hub.docker.com/
Weitere Beispiele und Ideen finden Sie unter:
https://docs.docker.com/get-started/
Listen Sie nun alle Docker-Container auf. Sie sehen, dass der hello-world-Container vor 1 Minute ausgeführt wurde.
geekflare@geekflare:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a1056caffc4 hello-world "/hello" vor 1 Minute Exited (0) vor 1 Minute zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/..." vor 12 Monaten Beendet (0) vor 12 Monaten mongo_container
Beginnen Sie mit der Erforschung von Docker; probieren Sie diese grundlegenden Docker-Befehle aus.
Nginx innerhalb eines Docker-Containers ausführen
Hier zeige ich Ihnen, wie Sie Nginx innerhalb eines Containers einsetzen können.
Der folgende Befehl sucht lokal nach einem Nginx-Image. Da kein lokales Image verfügbar ist, zieht er das Nginx-Docker-Image aus dem Docker-Hub. Anschließend wird ein Container mit dem Namen nginx_geekflare
unter Verwendung des Nginx-Docker-Images erstellt und Nginx auf Port 80 ausgeführt.
geekflare@geekflare:~$ docker run --name nginx_geekflare -p 80:80 -d nginx
Das Image 'nginx:latest' kann nicht lokal gefunden werden
latest: Wird aus Bibliothek/nginx gezogen
bf5952930446: Ziehen abgeschlossen
ba755a256dfe: Pull abgeschlossen
c57dd87d0b93: Pull komplett
d7fbf29df889: Pull komplett
1f1070938ccd: Abruf abgeschlossen
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Heruntergeladenes neueres Image für nginx:latest
fdad18387b27b48b8f2e14f8641791cc4d5edf667cc664198b67579cd76a5162
Wenn Sie die auf Ihrem System verfügbaren Docker-Images auflisten, können Sie sehen, dass das Nginx-Docker-Image gezogen wurde.
geekflare@geekflare:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08393e824c32 vor 4 Tagen 132MB
hello-world latest bf756fb1ae65 vor 7 Monaten 13.3kB
kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 Monate her 90.8MB
geekflare_mongodb latest 095d17727ca0 vor 12 Monaten 325MB
Führen Sie den folgenden Befehl aus, um alle laufenden Container aufzulisten. Sie können sehen, dass der Container nginx_geekflare
auf 0.0.0.0:80
läuft
geekflare@geekflare:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdad18387b27 nginx "/docker-entrypoint...." vor 58 Sekunden Up 32 Sekunden 0.0.0.0:80->80/tcp nginx_geekflare
1a1056caffc4 hello-world "/hello" Vor ungefähr einer Stunde Exited (0) Vor ungefähr einer Stunde zealous_bose
b0095c1e5536 geekflare_mongodb "/bin/sh -c usr/bin/..." Vor 12 Monaten Beendet (0) Vor 12 Monaten mongo_container
Gehen Sie in Ihrem Browser auf 0.0.0.0:80 und Sie sehen, dass nginx in einem Container läuft.
Häufige Anwendungsfälle von Docker
Vereinfachung der Konfiguration: Docker kann mit Hilfe seiner Konfiguration auf jeder Plattform ausgeführt werden, ohne den eigentlichen Overhead einer virtuellen Maschine.
Sie können die Konfigurationsdatei in den Code einfügen und Umgebungsvariablen übergeben, um sich an verschiedene Umgebungen anzupassen. So kann ein Docker-Image in einer anderen Umgebung verwendet werden.
Code-Verwaltung: Der Code durchläuft auf seinem Weg von der Entwicklung zur Produktion verschiedene Umgebungen.
Jede Umgebung unterscheidet sich ein wenig von der anderen. Docker beseitigt diese Unterschiede, indem es eine konsistente Umgebung bereitstellt, was die Entwicklung und Codierung sehr viel komfortabler macht.
Da Docker-Images unveränderlich sind, haben sie den Vorteil, dass sich die Anwendungsumgebung von der Entwicklung bis zur Produktion nicht ändert.
Verbesserte Entwicklungsproduktivität: Die beiden wichtigsten Ziele im Entwicklungs-Ökosystem bestehen darin, die Entwicklungsumgebung so nah wie möglich an die Produktionsumgebung anzugleichen und als nächstes Ziel so schnell wie möglich hochwertigen Code zu liefern.
Docker ermöglicht die Ausführung des Codes in einem Container, der die Produktionsumgebung widerspiegelt. Im Gegensatz zu VM hat Docker einen geringeren Overhead in Bezug auf die Speicherkapazität, wodurch mehrere Dienste ausgeführt werden können.
Das andere Ziel ist erreicht, da wir das Shared Volume von Docker verwenden, damit der Anwendungscode vom Host aus für den Container verfügbar ist. Dies ermöglicht es dem Entwickler, den Quellcode von seiner Plattform und seinem Editor aus zu bearbeiten, was sich in der laufenden Umgebung innerhalb von Docker widerspiegeln wird.
Isolierung von Anwendungen: Es gibt Fälle, in denen die Isolierung von Anwendungen erforderlich ist, z.B. bei API-Servern, die einen anderen Apache und eine andere Reihe von Abhängigkeiten benötigen.
Die Ausführung von API-Servern in verschiedenen Containern ist ein viel besserer Ausweg.
Debugging-Fähigkeiten: Docker bietet zahlreiche Tools, die gut mit Containern zusammenarbeiten. Sie können Checkpoints innerhalb von Containern und auch zwischen verschiedenen Containern einfügen, was beim Testen von Anwendungen sehr wichtig ist.
Schnelles Deployment: Docker-Container können schnell erstellt werden, da in Containern kein Betriebssystem hochgefahren wird, sondern nur die Anwendung läuft.
Einmal eingerichtet, geben sie Ihnen die Gewissheit, dass der Code in allen Umgebungen funktioniert, wenn er einmal funktioniert hat.
Fazit
Docker wird mit seinen zahlreichen Vorteilen zu einer wertvollen Ergänzung der IT-Infrastruktur. Ich hoffe, die obigen Ausführungen vermitteln Ihnen einen Eindruck davon.