Docker/Containerisieren: Unterschied zwischen den Versionen
K Schützte „Docker/Workshop/Containerisieren“ ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt)) |
Keine Bearbeitungszusammenfassung |
||
| Zeile 3: | Zeile 3: | ||
Im weiteren Verlauf dieser Anleitung werden Sie mit einem einfachen ToDo-Listen-Manager arbeiten, der auf Node.js läuft. Wenn Sie mit Node.js nicht vertraut sind, machen Sie sich keine Sorgen. Für diese Anleitung sind keine Vorkenntnisse in JavaScript erforderlich | Im weiteren Verlauf dieser Anleitung werden Sie mit einem einfachen ToDo-Listen-Manager arbeiten, der auf Node.js läuft. Wenn Sie mit Node.js nicht vertraut sind, machen Sie sich keine Sorgen. Für diese Anleitung sind keine Vorkenntnisse in JavaScript erforderlich | ||
=== | === Voraussetzungen === | ||
* Sie haben die neueste Version von [https://docs.docker.com/get-started/get-docker/ Docker Desktop] installiert | * Sie haben die neueste Version von [https://docs.docker.com/get-started/get-docker/ Docker Desktop] installiert | ||
* Sie haben einen [https://git-scm.com/downloads Git-Client] installiert | * Sie haben einen [https://git-scm.com/downloads Git-Client] installiert | ||
* Sie verfügen über eine IDE oder einen Texteditor zum Bearbeiten von Dateien. Docker empfiehlt die Verwendung von [https://code.visualstudio.com/ Visual Studio Code] | * Sie verfügen über eine IDE oder einen Texteditor zum Bearbeiten von Dateien. Docker empfiehlt die Verwendung von [https://code.visualstudio.com/ Visual Studio Code] | ||
=== | === Holen Sie sich die Anwendung === | ||
Bevor Sie die Anwendung ausführen können, müssen Sie den Quellcode der Anwendung auf Ihren Rechner holen.# Klonen Sie das [https://github.com/docker/getting-started-app/tree/main getting-started-app-Repository] mit dem folgenden Befehl: | Bevor Sie die Anwendung ausführen können, müssen Sie den Quellcode der Anwendung auf Ihren Rechner holen.# Klonen Sie das [https://github.com/docker/getting-started-app/tree/main getting-started-app-Repository] mit dem folgenden Befehl: | ||
| Zeile 14: | Zeile 14: | ||
git clone https://github.com/docker/getting-started-app.git | git clone https://github.com/docker/getting-started-app.git | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Sehen Sie sich den Inhalt des geklonten Repositorys an. Sie sollten die folgenden Dateien und Unterverzeichnisse sehen | Sehen Sie sich den Inhalt des geklonten Repositorys an. Sie sollten die folgenden Dateien und Unterverzeichnisse sehen | ||
├── getting-started-app/ | |||
├── .dockerignore | |||
├── package.json | |||
├── README.md | |||
├── spec/ | |||
├── src/ | |||
└── yarn.lock | |||
=== Image der Anwendung erstellen === | |||
=== | |||
Um das Image zu erstellen, müssen Sie ein Dockerfile verwenden. Ein Dockerfile ist einfach eine textbasierte Datei ohne Dateierweiterung, die ein Skript mit Anweisungen enthält. Docker verwendet dieses Skript, um ein Container-Image zu erstellen. | Um das Image zu erstellen, müssen Sie ein Dockerfile verwenden. Ein Dockerfile ist einfach eine textbasierte Datei ohne Dateierweiterung, die ein Skript mit Anweisungen enthält. Docker verwendet dieses Skript, um ein Container-Image zu erstellen. | ||
Erstellen Sie im Verzeichnis ''getting-started-app'', demselben Ort wie die Datei '''package.json''', eine Datei namens '''Dockerfile''' mit folgendem Inhalt: | Erstellen Sie im Verzeichnis ''getting-started-app'', demselben Ort wie die Datei '''package.json''', eine Datei namens '''Dockerfile''' mit folgendem Inhalt: | ||
# syntax=docker/dockerfile:1 | |||
node:lts-alpine | |||
/app | |||
[https://docs.docker.com/reference/dockerfile/#copy COPY] . . | [https://docs.docker.com/reference/dockerfile/#copy COPY] . . | ||
| Zeile 48: | Zeile 41: | ||
[https://docs.docker.com/reference/dockerfile/#expose EXPOSE] 3000 | [https://docs.docker.com/reference/dockerfile/#expose EXPOSE] 3000 | ||
Dieses Dockerfile beginnt mit einem node:lts-alpine-Basis-Image, einem leichtgewichtigen Linux-Image, auf dem Node.js und der Yarn-Paketmanager vorinstalliert sind. Es kopiert den gesamten Quellcode in das Image, installiert die notwendigen Abhängigkeiten und startet die Anwendung. | Dieses Dockerfile beginnt mit einem node:lts-alpine-Basis-Image, einem leichtgewichtigen Linux-Image, auf dem Node.js und der Yarn-Paketmanager vorinstalliert sind. Es kopiert den gesamten Quellcode in das Image, installiert die notwendigen Abhängigkeiten und startet die Anwendung. | ||
| Zeile 54: | Zeile 47: | ||
Vergewissern Sie sich im Terminal, dass Sie sich im getting-started-app-Verzeichnis befinden. Ersetzen Sie /path/to/getting-started-app durch den Pfad zu Ihrem getting-started-app-Verzeichnis | Vergewissern Sie sich im Terminal, dass Sie sich im getting-started-app-Verzeichnis befinden. Ersetzen Sie /path/to/getting-started-app durch den Pfad zu Ihrem getting-started-app-Verzeichnis | ||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
cd /pfad/bis/getting-started-app | cd /pfad/bis/getting-started-app | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Erstellen Sie das Image. | Erstellen Sie das Image. | ||
<syntaxhighlight lang="bash" highlight="1" line copy> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
docker buildx build -t getting-started . | docker buildx build -t getting-started . | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Der Befehl <code>docker buildx build</code> | Der Befehl <code>docker buildx build</code> verwendet das Dockerfile, um ein neues Image zu erstellen. Sie haben vielleicht bemerkt, dass Docker eine Menge "Schichten" heruntergeladen hat. Das liegt daran, dass Sie dem Builder mitgeteilt haben, dass Sie mit dem node:lts-alpine-Abbild beginnen wollen. Da Sie dieses aber nicht auf Ihrem Rechner hatten, musste Docker das Abbild herunterladen | ||
Nachdem Docker das Image heruntergeladen hatte, kopierten die Anweisungen aus der Dockerdatei Ihre Anwendung und installierten mit Hilfe von Garn die Abhängigkeiten Ihrer Anwendung. Die CMD-Direktive gibt den Standardbefehl an, der beim Starten eines Containers aus diesem Image ausgeführt werden soll | Nachdem Docker das Image heruntergeladen hatte, kopierten die Anweisungen aus der Dockerdatei Ihre Anwendung und installierten mit Hilfe von Garn die Abhängigkeiten Ihrer Anwendung. Die CMD-Direktive gibt den Standardbefehl an, der beim Starten eines Containers aus diesem Image ausgeführt werden soll | ||
Das Flag <code>-t</code> | Das Flag <code>-t</code> schließlich kennzeichnet Ihr Image. Stellen Sie sich dies als einen für Menschen lesbaren Namen für das endgültige Image vor. Da Sie dem Abbild den Namen getting-started gegeben haben, können Sie auf dieses Abbild verweisen, wenn Sie einen Container starten | ||
Das <code>.</code> | Das <code>.</code> am Ende des Docker-Build-Befehls teilt Docker mit, dass es im aktuellen Verzeichnis nach dem Dockerfile suchen soll | ||
=== | === Starten eines App-Containers === | ||
Jetzt, da Sie ein Image haben, können Sie die Anwendung mit dem Befehl <code>docker run</code> | Jetzt, da Sie ein Image haben, können Sie die Anwendung mit dem Befehl <code>docker run</code> in einem Container ausführen. | ||
Starten Sie Ihren Container mit dem Befehl docker run und geben Sie den Namen des soeben erstellten Images an: | Starten Sie Ihren Container mit dem Befehl docker run und geben Sie den Namen des soeben erstellten Images an: | ||
| Zeile 79: | Zeile 75: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Mit dem Flag <code>-d</code> | Mit dem Flag <code>-d</code> (kurz für <code>--detach</code> ) wird der Container im Hintergrund ausgeführt. Das bedeutet, dass Docker Ihren Container startet und Sie zur Terminal-Eingabeaufforderung zurückkehren. Außerdem werden keine Protokolle im Terminal angezeigt | ||
Das Flag <code>-p</code> | Das Flag <code>-p</code> (kurz für <code>--publish</code> ) erstellt eine Port-Zuordnung zwischen dem Host und dem Container. Das Flag <code>-p</code> nimmt einen String-Wert im Format HOST:CONTAINER an, wobei HOST die Adresse des Hosts und CONTAINER der Port des Containers ist. Der Befehl veröffentlicht den Port 3000 des Containers auf 127.0.0.1:3000 (localhost:3000) auf dem Host. Ohne die Portzuordnung wäre es nicht möglich, vom Host aus auf die Anwendung zuzugreifen.# Öffnen Sie nach ein paar Sekunden Ihren Webbrowser auf http://localhost:3000. Sie sollten Ihre Anwendung sehen | ||
; Hinweis | |||
: Um diesen Port nach außen zu veröffentlichen, muss die Syntax <port:port> verwendet werden | |||
: docker run -d -p 3000:3000 getting-started | |||
Fügen Sie ein oder zwei Elemente hinzu und prüfen Sie, ob sie wie erwartet funktioniert | |||
Sie können Elemente als vollständig markieren und entfernen. Ihr Frontend speichert erfolgreich Elemente im Backend | * Sie können Elemente als vollständig markieren und entfernen. Ihr Frontend speichert erfolgreich Elemente im Backend | ||
Zu diesem Zeitpunkt haben Sie einen laufenden ToDo-Listen-Manager mit ein paar Einträgen | Zu diesem Zeitpunkt haben Sie einen laufenden ToDo-Listen-Manager mit ein paar Einträgen | ||
| Zeile 97: | Zeile 94: | ||
docker ps | docker ps | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Es sollte eine ähnliche Ausgabe wie die folgende erscheinen | Es sollte eine ähnliche Ausgabe wie die folgende erscheinen | ||
< | |||
<syntaxhighlight lang="bash" highlight="" line> | |||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
df784548666d getting-started "docker-entrypoint.s..." vor 2 Minuten Up 2 Minuten 127.0.0.1:3000->3000/tcp priceless_mcclintock | df784548666d getting-started "docker-entrypoint.s..." vor 2 Minuten Up 2 Minuten 127.0.0.1:3000->3000/tcp priceless_mcclintock | ||
</ | </syntaxhighlight> | ||
=== | === Zusammenfassung === | ||
In diesem Abschnitt haben Sie die Grundlagen über die Erstellung eines Dockerfiles zur Erstellung eines Images gelernt. Nachdem Sie ein Image erstellt haben, haben Sie einen Container gestartet und die laufende Anwendung gesehen | In diesem Abschnitt haben Sie die Grundlagen über die Erstellung eines Dockerfiles zur Erstellung eines Images gelernt. Nachdem Sie ein Image erstellt haben, haben Sie einen Container gestartet und die laufende Anwendung gesehen | ||
| Zeile 111: | Zeile 109: | ||
* [https://docs.docker.com/reference/cli/docker/ Docker-CLI-Referenz] | * [https://docs.docker.com/reference/cli/docker/ Docker-CLI-Referenz] | ||
=== | === Nächste Schritte === | ||
Als Nächstes werden Sie eine Änderung an Ihrer Anwendung vornehmen und lernen, wie Sie Ihre laufende Anwendung mit einem neuen Image aktualisieren können. Nebenbei lernen Sie einige weitere nützliche Befehle kennen | Als Nächstes werden Sie eine Änderung an Ihrer Anwendung vornehmen und lernen, wie Sie Ihre laufende Anwendung mit einem neuen Image aktualisieren können. Nebenbei lernen Sie einige weitere nützliche Befehle kennen | ||
[https://docs.docker.com/get-started/workshop/03_updating_app/ Aktualisieren der Anwendung] | [https://docs.docker.com/get-started/workshop/03_updating_app/ Aktualisieren der Anwendung] | ||
[[Kategorie:Docker/Workshop]] | |||
# [https://docs.docker.com/reference/dockerfile/#from FROM] | |||
[ | [https://docs.docker.com/reference/dockerfile/#workdir WORKDIR] | ||
Version vom 21. Oktober 2025, 13:56 Uhr
Containerisieren
- Containerisieren einer Anwendung
Im weiteren Verlauf dieser Anleitung werden Sie mit einem einfachen ToDo-Listen-Manager arbeiten, der auf Node.js läuft. Wenn Sie mit Node.js nicht vertraut sind, machen Sie sich keine Sorgen. Für diese Anleitung sind keine Vorkenntnisse in JavaScript erforderlich
Voraussetzungen
- Sie haben die neueste Version von Docker Desktop installiert
- Sie haben einen Git-Client installiert
- Sie verfügen über eine IDE oder einen Texteditor zum Bearbeiten von Dateien. Docker empfiehlt die Verwendung von Visual Studio Code
Holen Sie sich die Anwendung
Bevor Sie die Anwendung ausführen können, müssen Sie den Quellcode der Anwendung auf Ihren Rechner holen.# Klonen Sie das getting-started-app-Repository mit dem folgenden Befehl:
git clone https://github.com/docker/getting-started-app.git
Sehen Sie sich den Inhalt des geklonten Repositorys an. Sie sollten die folgenden Dateien und Unterverzeichnisse sehen
├── getting-started-app/ ├── .dockerignore ├── package.json ├── README.md ├── spec/ ├── src/ └── yarn.lock
Image der Anwendung erstellen
Um das Image zu erstellen, müssen Sie ein Dockerfile verwenden. Ein Dockerfile ist einfach eine textbasierte Datei ohne Dateierweiterung, die ein Skript mit Anweisungen enthält. Docker verwendet dieses Skript, um ein Container-Image zu erstellen.
Erstellen Sie im Verzeichnis getting-started-app, demselben Ort wie die Datei package.json, eine Datei namens Dockerfile mit folgendem Inhalt:
# syntax=docker/dockerfile:1 node:lts-alpine /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Dieses Dockerfile beginnt mit einem node:lts-alpine-Basis-Image, einem leichtgewichtigen Linux-Image, auf dem Node.js und der Yarn-Paketmanager vorinstalliert sind. Es kopiert den gesamten Quellcode in das Image, installiert die notwendigen Abhängigkeiten und startet die Anwendung.
Erstellen Sie das Image mit den folgenden Befehlen:
Vergewissern Sie sich im Terminal, dass Sie sich im getting-started-app-Verzeichnis befinden. Ersetzen Sie /path/to/getting-started-app durch den Pfad zu Ihrem getting-started-app-Verzeichnis
cd /pfad/bis/getting-started-app
Erstellen Sie das Image.
docker buildx build -t getting-started .
Der Befehl docker buildx build verwendet das Dockerfile, um ein neues Image zu erstellen. Sie haben vielleicht bemerkt, dass Docker eine Menge "Schichten" heruntergeladen hat. Das liegt daran, dass Sie dem Builder mitgeteilt haben, dass Sie mit dem node:lts-alpine-Abbild beginnen wollen. Da Sie dieses aber nicht auf Ihrem Rechner hatten, musste Docker das Abbild herunterladen
Nachdem Docker das Image heruntergeladen hatte, kopierten die Anweisungen aus der Dockerdatei Ihre Anwendung und installierten mit Hilfe von Garn die Abhängigkeiten Ihrer Anwendung. Die CMD-Direktive gibt den Standardbefehl an, der beim Starten eines Containers aus diesem Image ausgeführt werden soll
Das Flag -t schließlich kennzeichnet Ihr Image. Stellen Sie sich dies als einen für Menschen lesbaren Namen für das endgültige Image vor. Da Sie dem Abbild den Namen getting-started gegeben haben, können Sie auf dieses Abbild verweisen, wenn Sie einen Container starten
Das . am Ende des Docker-Build-Befehls teilt Docker mit, dass es im aktuellen Verzeichnis nach dem Dockerfile suchen soll
Starten eines App-Containers
Jetzt, da Sie ein Image haben, können Sie die Anwendung mit dem Befehl docker run in einem Container ausführen.
Starten Sie Ihren Container mit dem Befehl docker run und geben Sie den Namen des soeben erstellten Images an:
docker run -d -p 127.0.0.1:3000:3000 getting-started
Mit dem Flag -d (kurz für --detach ) wird der Container im Hintergrund ausgeführt. Das bedeutet, dass Docker Ihren Container startet und Sie zur Terminal-Eingabeaufforderung zurückkehren. Außerdem werden keine Protokolle im Terminal angezeigt
Das Flag -p (kurz für --publish ) erstellt eine Port-Zuordnung zwischen dem Host und dem Container. Das Flag -p nimmt einen String-Wert im Format HOST:CONTAINER an, wobei HOST die Adresse des Hosts und CONTAINER der Port des Containers ist. Der Befehl veröffentlicht den Port 3000 des Containers auf 127.0.0.1:3000 (localhost:3000) auf dem Host. Ohne die Portzuordnung wäre es nicht möglich, vom Host aus auf die Anwendung zuzugreifen.# Öffnen Sie nach ein paar Sekunden Ihren Webbrowser auf http://localhost:3000. Sie sollten Ihre Anwendung sehen
- Hinweis
- Um diesen Port nach außen zu veröffentlichen, muss die Syntax <port:port> verwendet werden
- docker run -d -p 3000:3000 getting-started
Fügen Sie ein oder zwei Elemente hinzu und prüfen Sie, ob sie wie erwartet funktioniert
- Sie können Elemente als vollständig markieren und entfernen. Ihr Frontend speichert erfolgreich Elemente im Backend
Zu diesem Zeitpunkt haben Sie einen laufenden ToDo-Listen-Manager mit ein paar Einträgen
Wenn Sie einen kurzen Blick auf Ihre Container werfen, sollten Sie mindestens einen Container sehen, der das Getting-Started-Image verwendet und auf Port 3000 läuft. Um Ihre Container zu sehen, können Sie die CLI oder die grafische Oberfläche von Docker Desktop verwenden
Führen Sie den Befehl docker ps in einem Terminal aus, um Ihre Container aufzulisten
docker ps
Es sollte eine ähnliche Ausgabe wie die folgende erscheinen
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df784548666d getting-started "docker-entrypoint.s..." vor 2 Minuten Up 2 Minuten 127.0.0.1:3000->3000/tcp priceless_mcclintock
Zusammenfassung
In diesem Abschnitt haben Sie die Grundlagen über die Erstellung eines Dockerfiles zur Erstellung eines Images gelernt. Nachdem Sie ein Image erstellt haben, haben Sie einen Container gestartet und die laufende Anwendung gesehen
Verwandte Informationen
Nächste Schritte
Als Nächstes werden Sie eine Änderung an Ihrer Anwendung vornehmen und lernen, wie Sie Ihre laufende Anwendung mit einem neuen Image aktualisieren können. Nebenbei lernen Sie einige weitere nützliche Befehle kennen