Docker/Containerisieren: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „Docker/Workshop“ durch „Docker“ |
||
| (80 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== | '''{{BASEPAGENAME}}''' | ||
== Beschreibung == | |||
; Containerisieren einer Anwendung | ; Containerisieren einer Anwendung | ||
* Erstellung eines Dockerfiles zur Erstellung eines Images | |||
* Container starten | |||
* Laufende Anwendung prüfen | |||
; Beispiel | |||
ToDo-Manager der auf Node.js basiert | |||
* | * JavaScript-Vorkenntnisse sind hier nicht erforderlich | ||
=== | == Anwendung == | ||
; Anwendung herunterladen | |||
getting-started-app-Repositorys klonen | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
git clone https://github.com/docker/getting-started-app.git | |||
</syntaxhighlight> | |||
; Inhalt des geklonten Repositorys | |||
<syntaxhighlight lang="bash" highlight="1" copy line> | |||
tree -L 1 -a getting-started-app | |||
</syntaxhighlight> | |||
└── getting-started-app/ | |||
├── .dockerignore | |||
├── package.json | |||
├── README.md | |||
├── spec/ | |||
├── src/ | |||
└── yarn.lock | |||
* | == Dockerfile == | ||
; Dockerfile anlegen | |||
Ein Dockerfile ist einfach eine textbasierte Datei, die ein Skript mit Anweisungen enthält | |||
* Docker verwendet dieses Skript, um ein Container-Image zu erstellen | |||
Erstellen Sie im Verzeichnis ''getting-started-app'' eine Datei namens '''Dockerfile''' mit folgendem Inhalt | |||
<syntaxhighlight lang="dockerfile" highlight="" line copy> | |||
# syntax=docker/dockerfile:1 | |||
FROM node:lts-alpine | |||
WORKDIR /app | |||
COPY . . | |||
RUN yarn install --production | |||
CMD ["node", "src/index.js"] | |||
EXPOSE 3000 | |||
</syntaxhighlight> | |||
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 | |||
; Beschreibung | |||
# syntax | |||
# [https://docs.docker.com/reference/dockerfile/#from] | |||
# [https://docs.docker.com/reference/dockerfile/#workdir] | |||
# [https://docs.docker.com/reference/dockerfile/#copy] | |||
# [https://docs.docker.com/reference/dockerfile/#run] | |||
# [https://docs.docker.com/reference/dockerfile/#cmd] | |||
# [https://docs.docker.com/reference/dockerfile/#expose] | |||
== Image == | |||
; Image erstellen | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
cd getting-started-app | |||
</syntaxhighlight> | |||
; docker buildx build | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
docker buildx build -t getting-started . | |||
</syntaxhighlight> | |||
* | 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 hat, kopierten die Anweisungen aus der Dockerdatei Ihre Anwendung und installierten mithilfe 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> 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> am Ende des Docker-Build-Befehls teilt Docker mit, dass es im aktuellen Verzeichnis nach dem Dockerfile suchen soll | |||
== Container == | |||
; Container starten | |||
Starten Sie Ihren Container mit dem Befehl docker run und geben Sie den Namen des soeben erstellten Images an | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
docker run -d -p 127.0.0.1:3000:3000 getting-started | |||
</syntaxhighlight> | |||
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> (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 Port-Zuordnung 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 | |||
; Port nach außen veröffentlichen | |||
Um diesen Port nach außen zu veröffentlichen, muss die Syntax <port:port> verwendet werden | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
docker run -d -p 3000:3000 getting-started | |||
</syntaxhighlight> | |||
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 | |||
; Container aufzulisten | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
docker ps | |||
</syntaxhighlight> | |||
Es sollte eine ähnliche Ausgabe wie die folgende erscheinen | |||
<syntaxhighlight lang="bash" highlight="" line> | |||
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 | |||
</syntaxhighlight> | |||
== Nächste Schritte == | |||
[[Docker/Aktualisieren]] | |||
* Änderung an Anwendungen vornehmen | |||
* Laufende Anwendung mit einem neuen Image aktualisieren | |||
* Weitere nützliche Befehle | |||
;Zurück | |||
[[Docker/Grundlagen|Grundlagen]] | |||
;Weiter | |||
[[Docker/Aktualisieren|Aktualisieren]] | |||
<noinclude> | |||
=== | == Anhang == | ||
=== Siehe auch === | |||
<div style="column-count:2"> | |||
<categorytree hideroot=on mode="pages">Docker</categorytree> | |||
</div> | |||
---- | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}/}} | |||
=== Dokumentation === | |||
# https://docs.docker.com/reference/cli/docker | |||
<!-- | |||
; Man-Page | |||
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)] | |||
; Info-Pages | |||
--> | |||
[https://docs.docker.com/ | === Links === | ||
==== Projekt ==== | |||
==== Weblinks ==== | |||
# [https://docs.docker.com/reference/dockerfile/ Dockerfile-Referenz] | |||
# [https://docs.docker.com/reference/cli/docker/ Docker-CLI-Referenz] | |||
[[Kategorie:Docker]] | |||
</noinclude> | |||
Aktuelle Version vom 3. November 2025, 17:51 Uhr
Docker/Containerisieren
Beschreibung
- Containerisieren einer Anwendung
- Erstellung eines Dockerfiles zur Erstellung eines Images
- Container starten
- Laufende Anwendung prüfen
- Beispiel
ToDo-Manager der auf Node.js basiert
- JavaScript-Vorkenntnisse sind hier nicht erforderlich
Anwendung
- Anwendung herunterladen
getting-started-app-Repositorys klonen
git clone https://github.com/docker/getting-started-app.git
- Inhalt des geklonten Repositorys
tree -L 1 -a getting-started-app
└── getting-started-app/
├── .dockerignore
├── package.json
├── README.md
├── spec/
├── src/
└── yarn.lock
Dockerfile
- Dockerfile anlegen
Ein Dockerfile ist einfach eine textbasierte Datei, die ein Skript mit Anweisungen enthält
- Docker verwendet dieses Skript, um ein Container-Image zu erstellen
Erstellen Sie im Verzeichnis getting-started-app eine Datei namens Dockerfile mit folgendem Inhalt
# syntax=docker/dockerfile:1
FROM node:lts-alpine
WORKDIR /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
- Beschreibung
Image
- Image erstellen
cd getting-started-app
- docker buildx build
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 hat, kopierten die Anweisungen aus der Dockerdatei Ihre Anwendung und installierten mithilfe 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
Container
- Container starten
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
-pnimmt 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 Port-Zuordnung 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
- Port nach außen veröffentlichen
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
- 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
Nächste Schritte
- Änderung an Anwendungen vornehmen
- Laufende Anwendung mit einem neuen Image aktualisieren
- Weitere nützliche Befehle
- Zurück
- Weiter
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks