Docker Aufgabensammlung - linux: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 201: Zeile 201:
 
*Erstellen der Dockerfile: '''vi dockerfile'''
 
*Erstellen der Dockerfile: '''vi dockerfile'''
 
**Inhalt:
 
**Inhalt:
<pre>  
+
<pre>
 
FROM php:7.2-apache
 
FROM php:7.2-apache
 
COPY src/ /var/www/html/
 
COPY src/ /var/www/html/
Zeile 263: Zeile 263:
 
</html>
 
</html>
 
</pre>
 
</pre>
 +
*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"'''
  
 
== Kapitel 6 – Docker Volumes erstellen und einbinden ==
 
== Kapitel 6 – Docker Volumes erstellen und einbinden ==

Version vom 4. November 2024, 10:32 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 - Transferaufgabe

  • 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"

Kapitel 6 – 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

Kapitel 6.1 – Docker Volumes entfernen

  • Entfernen Sie das Volume:
docker volume rm test-volume