Docker Aufgabensammlung - linux: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 328: Zeile 328:
 
</pre>
 
</pre>
 
*Aktualisieren Sie nun ihren Webbrowser
 
*Aktualisieren Sie nun ihren Webbrowser
 +
 +
== Kapitel 8 - Docker Logs==
 +
*Für ein Debugging von Containern wird auf die Docker Logs zurückgegriffen.
 +
*Schauen Sie sich ihre Log Einträge des telefon-app Containers an: '''docker logs telefon-app'''
 +
*Weitere Optionen
 +
**'''--details''': Anzeigen weiterer Details des Logs
 +
**'''--tail <Anzahl>''': Zeigt die letzten '''X''' Zeilen des Logs an
 +
**'''--timestamp''': liefert einen Zeitstempel mit
 +
*Um das Log Live zu betrachten führen Sie nun den Befehl: '''docker logs telefon-app -f''' aus
 +
*Suchen Sie in der Telefonnummer Suche nun nach einem Namen (In der Website des Containers) und beobachten Sie gleichzeitig ihr Log

Version vom 4. November 2024, 13:58 Uhr

Aufgabensammlung – Docker Container Grundlagen (Linux)

Kapitel 0 - Vorbereitung im Docker.hub

  • Besuchen Sie die Webseite https://hub.docker.com
  • Klicken Sie oben rechts im Eck auf Sign up und erstellen Sie sich ein Konto im Docker Hub
  • Der Username wird später als ihre Docker-ID dienen


Kapitel 1 – Installation von Docker auf Linux

  1. Öffnen Sie ein Terminal.
  2. Aktualisieren Sie Ihre Paketquellen:
sudo apt update
sudo apt upgrade
  1. Installieren Sie Docker:
sudo apt install docker.io
  1. Starten Sie den Docker-Dienst:
sudo systemctl start docker
sudo systemctl enable docker
  1. Prüfen Sie die Docker-Installation, indem Sie den Befehl „docker“ ausführen. Es sollten verschiedene Docker-Befehle angezeigt werden.
  2. Überprüfen Sie die Docker-Version:
docker version

Frage: Was sehen Sie als Ausgabe?

Kapitel 2 – Ausführen des ersten „Hello World“ Containers

  1. Führen Sie im Terminal den folgenden Befehl aus:
sudo docker run hello-world

Erklärung: Docker sucht lokal nach dem „hello-world“ Image. Da es nicht vorhanden ist, lädt Docker es vom Docker-Hub herunter und führt es aus. Es sollte eine Nachricht erscheinen, die bestätigt, dass Docker korrekt installiert ist.

  1. Listen Sie die vorhandenen Images auf:
docker image ls

Frage: Was können Sie sehen?

  1. Verwenden Sie „docker help <OPTION>“ für weitere Informationen, z.B. „docker help run“.

Kapitel 3 – Das Docker Hub

  1. Besuchen Sie Docker Hub.
  2. Suchen Sie nach dem Image „hello-world“ und sehen Sie sich die Details an.

Tipp: Sie können die Suche auch im Terminal durchführen:

docker search hello-world

Kapitel 3.1 – Arbeiten mit Image-Versionen

  1. Suchen Sie auf Docker Hub nach dem „Ubuntu“-Image und wechseln Sie auf die Registerkarte „Tags“ (zeigt die verfügbaren Versionen).
  2. Laden Sie die Version „ubuntu:xenial“ herunter:
sudo docker pull ubuntu:xenial
  1. Starten Sie einen Container:
sudo docker run -t -d --name ubuntu-xenial ubuntu:xenial
Erklärung:
sudo -> Zum ausführen als root
docker run -> Startet einen neuen Container
-t -> Erstellt ein Pseudo-TTY für Standardausgabe und -eingabe
-d -> Startet den Container im Hintergrund
--name ubuntu-xenial Verleiht dem Container einen Namen. (Einfache für die Handhabung)
ubuntu:xenial -> Gibt an welches Image und welcher Tag der Container verwenden soll
  1. Listen Sie die laufenden Container auf:
docker ps
docker container ls
  1. Greifen Sie mit einer Bash-Shell auf den Container zu:
sudo docker exec -it ubuntu-xenial /bin/bash
Erklärung:
sudo -> Zum ausführen des Befehls als root
docker exec -> Führt einen Befehl in einem Container aus
-i -> (interactive) Ermöglicht die Interaktion mit der Standardeingabe (STDIN) des Containers
-t -> Erstellt ein Pseudo-TTY für Standardausgabe und -eingabe
ubuntu-xenial -> Der Name des Containers in dem der Befehl ausgeführt werden soll
/bin/bash -> Der Befehl der ausgeführt wird. In diesem Fall wird eine Bash-Shell geöffnet

Prüfen Sie die Umgebung: Geben Sie den Befehl „cat /etc/issue“ ein.

  1. Verlassen Sie die Bash-Shell des Containers mit „exit“.

Kapitel 3.2 – Transferaufgabe

  • Starten Sie einen Container mit „Debian Bullseye“, benennen Sie ihn und führen Sie „cat /etc/issue“ aus.
  • Informieren Sie Ihren Dozenten bei erfolgreicher Ausführung.

Kapitel 4 – Ein Image selbst bauen

Erstellen Sie einen Ordner für den Build-Kontext:

mkdir -p /mnt/mein-image
cd /mnt/mein-image

Erstellen Sie eine „hello.sh“-Datei:

nano hello.sh

Inhalt:

#!/bin/bash
echo Hallo *Ihr Name*

Erstellen Sie eine „Dockerfile“-Datei:

nano Dockerfile

Inhalt:

FROM ubuntu:latest
COPY hello.sh .
RUN chmod +x ./hello.sh
CMD ["/hello.sh"]

Bauen Sie das Image:

sudo docker build -t <Ihr Docker_ID>/<Image Name>:v1.0 .

Testen Sie das Image:

sudo docker run -i -t <Ihr Docker_ID>/<Image Name>:v1.0

Kapitel 4.1 – Transferaufgabe

  • Aufgabe 1: Passen Sie „hello.sh“ so an, dass das Skript nach einem Namen fragt und eine persönliche Begrüßung ausgibt. Nennen Sie das Image <Ihr Docker_ID>/<Image Name>:v2.0
  • Aufgabe 2: Erweitern Sie das Skript so, dass es wiederholt nach einem Namen fragt, bis „quit“ eingegeben wird. Nennen Sie das Image <Ihr Docker_ID>/<Image Name>:v3.0 und anschließend nochmal mit dem Namen <Ihr Docker_ID>/<Image Name>

Kapitel 4.2 – Docker Image Management im Docker Hub

  1. Melden Sie sich beim Docker Hub an:
docker login
  1. Laden Sie Ihr Images hoch:
docker push <Ihr Docker_ID>/<Image Name>:v1.0
docker push <Ihr Docker_ID>/<Image Name>:v2.0
docker push <Ihr Docker_ID>/<Image Name>:v3.0
docker push <Ihr Docker_ID>/<Image Name>
  1. Überprüfen Sie Ihr Repository auf Docker Hub.

Kapitel 4.3 – Docker Container Management – Starten und Beenden

  1. Starten Sie einen Container im „detached“-Modus.
  2. Beenden Sie den Container:
docker stop <Container Name>
  1. Nutzen Sie „docker container ls -a“, um alle Container zu sehen.
  2. Anschließend nutzen Sie "docker ps"
  3. Beenden Sie den Container mit:
docker kill <Container Name>
  1. Verwenden Sie "docker top <Container Name> um sich die laufenden Prozesse eines Containers anzeigen zu lassen

Kapitel 5 – Einen Webserver mit NGINX erstellen

  1. Führen sie den Befehl docker run --name test-nginx -d -p 8080:80 nginx durch
  2. Überprüfen Sie ob der Container läuft -> docker container ls
  3. Rufen Sie im Browser die Seite http://<IP-des-Linux-Servers>:8080
  4. Stoppen Sie den Container wieder

Kapitel 5.1 - Einen personalisierten Webserver erstellen

  1. Erstellen Sie einen Ordner mit einem Unterordner „html“ mkdir -p /mnt/mein-nginx/html
  2. Legen Sie eine „index.html“ mit folgendem Inhalt in den „html“-Ordner vi index.html:
<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Webserver mit Docker</title>
</head>
<body>
    <h1>Herzlichen Glückwunsch!</h1>
    <p>Sie haben Ihren ersten Webserver mit Docker erstellt!</p>
</body>
</html>
  1. Gehen Sie in den Ordner cd /mnt/mein-nginx/
  2. Erstellen Sie nun ein Dockerfile mit folgendem Inhalt:
FROM nginx:latest
COPY html /usr/share/nginx/html
  1. Bauen Sie ihr neues Images docker build -t <Docker_ID>/hello-web .
  2. Starten Sie den Container docker run --name hello-web -d -p 8080:80 <Docker_ID>/hello-web
  3. Öffnen Sie http://<IP-des-Linux-Servers>:8080 in Ihrem Browser.

Kapitel 5.2 - Eine PHP Website erstellen

  • Nun erstellen wir eine umfangreichere Website, die später für eine weitere Aufgabe benötigt wird.
  • Erstelle den neuen Ordner Pfad mkdir -p /mnt/telefon-app/src
  • Wechseln in das Verzeichnis cd /mnt/telefon-app
  • Erstellen der Dockerfile: vi dockerfile
    • Inhalt:
FROM php:7.2-apache
COPY src/ /var/www/html/
  • Und nun noch die index.php unter vi src/index.php
<!DOCTYPE html>
<html lang="de">
<head>
        <title> Telefon Liste PHP </title>
</head>
<body bgcolor="lightgreen">
 <h1>Telefonnummer Suche</h1>

<?php
if(!isset($_GET['surname']))
{
        $currentName= "";
}
else
{
        $currentName = $_GET[ 'surname'];
}
if($currentName != "")
{
        if(checkName($currentName))
        {
                echo "Der Name ". $currentName . " wurde gefunden";
        }
        else
        {
                echo "Unbekannter Name: ". $currentName;
        }
}
function checkName($userName)
{
        $userList = array(      "Hannes" =>     "089/73227",
                                "Heidi" =>      "089/73226",
                                "Philipp" =>    "099/5755",
                                "Paul" =>       "099/12345"
                                );
        if (array_key_exists($userName, $userList))
        {
                echo "<p>Name: $userName, Tel: $userList[$userName]</p>";
                return true;
        }
        return false;
}
?>

<form action="index.php" method="get">
    <p>Geben Sie einen Namen ein:
    <input type="text" name="surname"> </p>

    <p>
    <input type="submit" value="Suchen">
    </p>
</form>

</body>
</html>
  • Nun den Container zusammenbauen docker build -t <Docker_ID>/telefon-app .
  • Anschließend den Container starten docker run --name telefon-app -d -p 8808:80 <Docker_ID>/telefon-app
  • Besuchen Sie die Website: http://<IP-des-Linux-Servers>:8808
    • Tippen Sie in die Leiste den Namen "Heidi" ein und einmal den Namen "Tim"
  • Pushen Sie nun ihr Image in ihren Docker Hub Account

Kapitel 6 - Installation von Visual-Studio Code

  • Besuche https://code.visualstudio.com und klicke auf Download for Windows
  • Anschließend installieren Sie die .exe
  • Nun installieren wir weitere Extensions um die Nutzung von VSC zu verbessern
    • Dafür im VSC in der linken Seite auf den Extensions Button klicken (4 kleine Vierecke)
    • Nun die Extensions "Docker", "Docker Compose", "Remote - SSH" installieren
  • Verbinden Sie nun ihren Linux Server mit der VSC Instanz mittels SSH

Kapitel 7 – Docker Volumes erstellen und einbinden

  1. Erstellen Sie ein Volume:
docker volume create test-volume
  1. Starten Sie einen Container und binden Sie das Volume ein:
docker run -i -t --name=vol-test --mount source=test-volume,destination=/test_data ubuntu /bin/bash
  1. Erstellen Sie die Datei „hello.txt“ im „/test_data“ Verzeichnis und überprüfen Sie den Inhalt:
echo "Hello World" > /test_data/hello.txt
cat /test_data/hello.txt
  1. Starten Sie einen weiteren Container und binden Sie das Volume erneut ein:
docker run -i -t --name=vol-test2 -v test-volume:/test_data ubuntu /bin/bash
  1. Rufen Sie wieder folgenden Befehl auf:
cat /test_data/hello.txt
  • Was stellen Sie fest?
  1. Führen Sie nun folgenden Befehl durch um eine detaillierte Information über das volume zu bekommen:
docker volume inspect test-vol

Kapitel 7.1 – Docker Volumes entfernen

  • Um das Volume zu entfernen müssen Sie erstmal alle container Entfernen die dieses Volume benutzen:
docker rm vol-test
docker rm vol-test2
  • Entfernen Sie nun das Volume:
docker volume rm test-volume

Kapitel 7.2 – Docker Volumes - zum live bearbeiten von Dateien

  • Führen Sie folgenden Befehl durch docker run --name telefon-app -d -p 8808:80 -v /mnt/telefon-app/src:/var/www/html <Docker_ID>/telefon-app
    • Anmerkung: Dadurch exposen wir die index.php nach außen und können die Seite im Live Betrieb ändern.
  • Rufen Sie zunächst ihre Website auf http://<IP-des-Linux-Servers>:8808
  • Bearbeiten Sie nun die index.php vi /mnt/telefon-app/src/index.php und ändern Sie folgenden Wert in der Zeile 6:
 
<body bgcolor="lightgreen">

ändern zu:

<body bgcolor="yellow">
  • Aktualisieren Sie nun ihren Webbrowser

Kapitel 8 - Docker Logs

  • Für ein Debugging von Containern wird auf die Docker Logs zurückgegriffen.
  • Schauen Sie sich ihre Log Einträge des telefon-app Containers an: docker logs telefon-app
  • Weitere Optionen
    • --details: Anzeigen weiterer Details des Logs
    • --tail <Anzahl>: Zeigt die letzten X Zeilen des Logs an
    • --timestamp: liefert einen Zeitstempel mit
  • Um das Log Live zu betrachten führen Sie nun den Befehl: docker logs telefon-app -f aus
  • Suchen Sie in der Telefonnummer Suche nun nach einem Namen (In der Website des Containers) und beobachten Sie gleichzeitig ihr Log