# Docker Images mit Docker Commit und Dockerfiles erstellen

Sobald Sie die Grundlagen der Arbeit mit [Docker](https://www.ionos.at/digitalguide/server/knowhow/was-ist-docker/ "Was ist Docker?") erlernt haben, ist der nächste Schritt, Ihre eigenen Images zu erstellen und zu speichern.

Es gibt zwei Möglichkeiten, ein [Docker-Image](https://www.ionos.at/digitalguide/server/knowhow/docker-image/ "Docker-Image") zu erstellen:

- Manuell mit dem Befehl **docker commit** oder
- Automatisch mit einer Docker-Datei.

## Anforderungen

- IONOS Linux Cloud Server
- [Docker](https://www.ionos.at/digitalguide/server/knowhow/was-ist-docker/) installiert und läuft
- Grundlegende Kenntnisse der Docker-Funktionalität und der -Befehle

## Sicheres Arbeiten mit Docker ohne Sudo

Der Docker-Daemon läuft als root, was bedeutet, dass Benutzer sudo verwenden müssen, um [Docker-Befehle](https://www.ionos.at/digitalguide/server/knowhow/docker-befehle/ "Docker-Befehle") auszuführen.

Um nicht für jeden Docker-Befehl sudo verwenden zu müssen, fügen Sie einfach Ihre Benutzer mit folgendem Befehl zur Docker-Gruppe hinzu:

```none
usermod -aG docker [username]
```

Wenn Sie beispielsweise den Benutzer jdoe zur Docker-Gruppe hinzufügen, muss dieser Benutzer nicht mehr sudo für jeden Docker-Befehl verwenden. Um den Benutzer zur Gruppe hinzuzufügen, verwenden Sie den Befehl:

```none
usermod -aG docker jdoe
```

## Manuelles Erstellen eines Images mit “docker commit”

Der einfachste Weg um zu beginnen, ist, einen Container aus einem bereits vorhandenen Image zu erstellen, Ihre Änderungen vorzunehmen und diesen Container dann als Image zu speichern. Für dieses Tutorial erstellen wir einen Container aus dem offiziellen CentOS 7 Image, installieren das MySQLdb Python Modul und speichern diesen neuen Container dann als Image mit Docker Commit.

Das offizielle CentOS 7-Image trägt den Namen centos. Sie können es mit folgendem Befehl aus der Docker-Registry herunterladen:

```none
sudo docker pull centos
```

Hinweis Wenn Sie lieber Ubuntu verwenden, ersetzen Sie stattdessen einfach ein Ubuntu-Image.

Starten Sie zunächst einen Container namens **python-with-mysql** aus dem centos-Image mit folgendem Befehl:

```none
sudo docker run -it --name python-with-mysql centos bash
```

Sobald Sie sich an der Eingabeaufforderung im neuen Container befinden, installieren Sie das MySQLdb Python-Modul mit dem Befehl:

```none
yum -y install MySQL-python
```

Wenn die Installation abgeschlossen ist, verwenden Sie STRG-p STRG-q, um den Container zu verlassen.

Als nächstes speichern Sie den Container als Image mit dem Befehl **docker commit**, der die folgende Syntax aufweist:

```none
sudo docker commit -m "[build notes]" -a "creator info" [container name or ID] [name of image]:[version tag]
```

- Erstellen Sie Notizen, zum Beispiel eine kurze Erklärung der Änderungen an diesem Image
- Info über Autor: Ihr Name und (falls zutreffend) Ihre Kontaktdaten
- Containername oder ID: Diese Informationen finden Sie mit dem Befehl sudo docker ps -a
- Name des Images: Geben Sie Ihrem Image einen kurzen, aber anschaulichen Namen
- Optional: Versions-Tag: Die Versionsnummer Ihres Images. Sie können entweder eine Nummer angeben (wie v1, v2, v3, etc.) oder Sie können “latest” verwenden. Wenn Sie den Versions-Tag weglassen, wird “latest” angenommen.

Um den Container **python-with-mysql** als Image namens **python/mysql** zu speichern, verwenden Sie den Befehl:

```none
sudo docker commit -m "Added MySQL-python module" -a "J Doe" python-with-mysql python/mysql
```

Um einen Container von diesem neuen Image aus auszuführen, verwenden Sie den Befehl:

```none
sudo docker run -it python/mysql /bin/bash
```

## Automatisches Erstellen eines Images mit einer Docker-Datei

Das manuelle Erstellen eines Bildes mit Docker Commit funktioniert gut, ist aber ein umständlicher Prozess. Es ist auch einfacher, eine Docker-Datei mit Ihrem Team zu teilen, als eine Liste von Befehlen, die ausgeführt werden müssen. Obwohl Docker Commit für einige Anwendungen gut funktioniert, ist es auf lange Sicht praktischer, eine Docker-Datei zu verwenden.

Eine Docker-Datei enthält eine Reihe von Anweisungen zum Erstellen eines neuen Images. Für dieses Tutorial folgen wir dem gleichen Prozess wie im vorherigen Abschnitt: Wir erstellen einen Container aus dem offiziellen CentOS 7 Image und installieren das MySQLdb Python Modul.

Das offizielle CentOS 7-Image trägt den Namen centos. Sie können es von der Docker-Website mit folgendem Befehl herunterladen:

```none
sudo docker pull centos
```

Hinweis Wenn Sie lieber Ubuntu verwenden, ersetzen Sie stattdessen einfach ein Ubuntu-Image.

Erstellen Sie zunächst ein neues Verzeichnis für Ihre Docker-Datei:

```none
mkdir python-mysql
```

In diesem Verzeichnis werden alle notwendigen Dateien abgelegt, die in den Build aufgenommen werden sollen. Es ist wichtig, zunächst ein neues Verzeichnis zu erstellen, da alles, was sich in diesem Verzeichnis befindet, beim Ausführen des Build-Befehls an den Docker-Daemon übertragen wird.

Als nächstes erstellen Sie eine Datei namens [Dockerfile](https://www.ionos.at/digitalguide/server/knowhow/dockerfile/ "Dockerfile") im python-mysql-Verzeichnis. Beachten Sie, dass der Dateiname großgeschrieben werden muss.

```none
cd python-mysql
sudo nano Dockerfile
```

Diese Datei enthält alle Ihre Build-Befehle. Eine vollständige Liste der verfügbaren Befehle und deren Verwendung finden Sie auf der Eine vollständige Liste der verfügbaren Befehle und deren Verwendung finden Sie auf der [Docker-Website](https://docs.docker.com/engine/reference/builder/ "Docker-Website").

Die grundlegenden Inhalte der Dockerfile sind einfach zu verstehen:

- Jede Zeile, die mit einem # beginnt, wird übersprungen. Verwenden Sie dies für Kommentare.
- Das Standardformat ist: INSTRUCTION-Anweisung, mit der Anweisung in all-caps.

Fügen Sie Folgendes in Ihre Docker-Datei ein:

```none
# The source image to start with
FROM centos
# Your contact info
MAINTAINER J Doe ;jdoe@example.com
# Run a command inside the image
RUN yum -y install MySQL-python
```

Speichern und beenden Sie die Datei.

Um ein Image namens python/mysql/dockerfile aus dieser Dockerfile zu erstellen, verwenden Sie den Befehl:

```none
sudo docker build -t python/mysql/dockerfile:v1 .
```

Für die Docker-Datei geben wir die Version v1 an, da wir erwarten, dass dieses Image in Zukunft freigegeben und/oder aktualisiert wird.

Um einen Container namens python-with-mysql-from-dockerfile aus dem python/mysql/dockerfile-Image zu starten, verwenden Sie den Befehl:

```none
sudo docker run --name python-with-mysql-from-dockerfile -it python/mysql/dockerfile:v1 bash
```


This is a markdown version of: [https://www.ionos.at/digitalguide/server/knowhow/docker-images-erstellen/](https://www.ionos.at/digitalguide/server/knowhow/docker-images-erstellen/) for AI/LLM consumption.