it-wiki:docker:docker_createcontainerimages
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
it-wiki:docker:docker_createcontainerimages [2021/10/17 15:46] – angelegt marko | it-wiki:docker:docker_createcontainerimages [2021/10/18 06:50] (aktuell) – [6. Dein neues Docker-Image starten. Wohooo!] marko | ||
---|---|---|---|
Zeile 23: | Zeile 23: | ||
Dockerfile' | Dockerfile' | ||
+ | <code bash> | ||
+ | FROM < | ||
+ | </ | ||
+ | Da wir Nginx benötigen, sollte unsere erste Zeile im Dockerfile wie folgt aussehen: | ||
+ | <code bash> | ||
+ | FROM nginx: | ||
+ | </ | ||
+ | Schreibe diese Zeile in dein Dockerfile und speichere die Datei. | ||
+ | |||
+ | **Hinweis zur Versionierung von Images:** | ||
+ | |||
+ | Es ist so schön einfach :latest-Tag zu verwenden, um die aktuelle Image-Version zu erhalten. Jedoch ist hier vorsicht geboten. Nicht immer bekommst du die Version des Image, die auf deine Anwendung abgestimmt ist. Ich empfehle dir daher immer die spezifische Versionsnummer als Tag anzugeben. | ||
+ | |||
+ | Sobald du eine Aktualisierung vorgenommen hast, solltest du dein Dockerfile auf die entsprechend Versionsnummer abändern. | ||
+ | |||
+ | Ja, das ist mehr Aufwand, aber es schützt auch vor Kopfschmerzen durch inkompatible Versionen! | ||
+ | |||
+ | ===== 2. Befehle ausführen ===== | ||
+ | Wenn du das Base-Image angegeben hast, musst du weitere Befehle definieren, um dein Image zu konfigurieren. Hier gibt es mehrere Befehle, die dir dabei helfen z.B. RUN und COPY. | ||
+ | |||
+ | Hier eine kurze Erklärung zu RUN und COPY: | ||
+ | |||
+ | === RUN < | ||
+ | Der RUN-Befehl erlaubt es dir, jeden Befehl wie in der Kommandozeile auszuführen. Damit kannst du bspw. verschiedene Anwendungspakete installieren oder einen Build-Befehl ausführen. | ||
+ | |||
+ | Die Ergebnisse des RUN-Befehls werden im Image gespeichert, | ||
+ | |||
+ | === COPY < | ||
+ | Mit COPY kannst du Dateien aus dem Verzeichnis, | ||
+ | |||
+ | **Hier eine einfache Übung zum COPY-Befehl: | ||
+ | |||
+ | Um etwas Praxis-Erfahrung zu bekommen führe Folgendes aus. | ||
+ | |||
+ | - Erstelle eine .html Datei z.B. index.html und fülle sie mit etwas Inhalt. Diese Datei wollen wir im Anschluss in unserem Container bereitstellen. | ||
+ | - Benutze in der nächsten Zeile den Befehl COPY Befehl, um die index.html in das Nginx-Verzeichnis / | ||
+ | Hast du das gemacht? Gut! Dann geht es jetzt weiter mit der Freischaltung der Ports. | ||
+ | |||
+ | ===== 3. Ports freigeben (öffnen) ===== | ||
+ | Wenn die Dateien in unser Image kopiert wurden und die Dependencies heruntergeladen sind, musst du noch den Port definieren. Genauer gesagt musst du spezifizieren, | ||
+ | |||
+ | Dafür benutzt du den Befehl //EXPOSE < | ||
+ | |||
+ | **Docker-Beispiel, | ||
+ | <code bash> | ||
+ | EXPOSE 80 433 | ||
+ | EXPOSE 7000-8000 | ||
+ | </ | ||
+ | Wenn du diesen Schritt nachmachen möchtest, dann gib mit dem obigen Befehl den Port 80 frei. Der Port 80 muss geöffnet sein, damit unser Webserver (Nginx) verfügbar ist. Füge die Zeile (EXPOSE 80) deinem Dockerfile hinzu, um diesen Schritt auszuführen und speichere deine Datei. | ||
+ | |||
+ | ===== 4. Anwendung per Befehl starten ===== | ||
+ | Fassen wir kurz zusammen was bis hierhin passiert ist. Du hast ein Docker-Image konfiguriert und festgelegt, auf welchen Port deine Anwendung zugreifen muss. Jetzt ist es an der Zeit den Befehl zu definieren, der deine Anwendung startet. | ||
+ | |||
+ | Der CMD-Befehl in einem Dockerfile definiert den Standardbefehl, | ||
+ | |||
+ | **CMD Befehl mit Argumenten als Array:** | ||
+ | |||
+ | [" | ||
+ | Die obige Zeile würde dann den Befehl **"cmd -a "arga value" -b argb-value" | ||
+ | |||
+ | Jetzt bist du wieder gefragt: Der Befehl zum Ausführen von NGINX lautet nginx -g daemon off;. | ||
+ | |||
+ | Setze diesen Befehl als Standardbefehl in deinem Dockerfile. | ||
+ | |||
+ | ===== 5. Das Container-Image erstellen ===== | ||
+ | Nachdem du dein Dockerfile definiert hast, musst du es mit docker build in ein Image umwandeln. Der Befehl build nimmt ein Verzeichnis mit dem Dockerfile auf, führt die Schritte aus und speichert das Image in deiner lokalen Docker Engine. Wenn einer der Schritte aufgrund eines Fehlers fehlschlägt, | ||
+ | |||
+ | **Willst du diesen Schritt nachmachen? | ||
+ | |||
+ | Benutze den Befehl **docker build**, um das Image zu bauen. Du kannst dem Image einen lesbaren Namen geben, indem du das Argument -t < | ||
+ | <code bash> | ||
+ | docker build -t mein-image | ||
+ | </ | ||
+ | Tipp: Mit dem Befehl docker images siehst du eine Liste deiner Images. Damit kannst du prüfen, ob der Build-Vorgang erfolgreich beendet wurde. | ||
+ | |||
+ | ===== 6. Dein neues Docker-Image starten. Wohooo! ===== | ||
+ | Wenn das Image erfolgreich erstellt wurde, kannst du den Container nun auf die gleiche Weise starten, wie du es schon aus vorherigen Tutorials kennst. Solltest du noch nicht wissen, wie du ein Image startest, findest du nachfolgend den Befehl dafür. | ||
+ | |||
+ | **Du möchtest diesen Schritt nachmachen? | ||
+ | |||
+ | Der Webserver Nginx ist so konzipiert, dass er als Hintergrund-Prozess läuft. Du solltest daher die Option -d verwenden. Beim Ausführen solltest du als Argument ebenso den Port 80 an deinen Container binden (p 80:80). | ||
+ | |||
+ | Klingt kompliziert? | ||
+ | |||
+ | **Hier der fertige docker run Befehl:** | ||
+ | <code bash> | ||
+ | docker run -d -p 80:80 <Image ID oder Shortname> | ||
+ | </ | ||
+ | Da ich mein Image im letzten Schritt " | ||
+ | <code bash> | ||
+ | docker run -d -p 80:80 mein-image | ||
+ | </ | ||
+ | Du kannst überprüfen, |
it-wiki/docker/docker_createcontainerimages.1634485562.txt.gz · Zuletzt geändert: von marko