Docker Images mit Docker Commit und Dockerfiles erstellen

Sobald Sie die Grundlagen der Arbeit mit Docker erlernt haben, ist der nächste Schritt, Ihre eigenen Images zu erstellen und zu speichern.

Es gibt zwei Möglichkeiten, ein Docker-Image zu erstellen:

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

Anforderungen

  • IONOS Linux Cloud Server
  • Docker installiert und läuft
  • Grundlegende Kenntnisse der Docker-Funktionalität und der -Befehle

Weitere Informationen zur Installation und Verwendung von Docker finden Sie in unseren anderen Artikeln:

Sicheres Arbeiten mit Docker ohne Sudo

Der Docker-Daemon läuft als root, was bedeutet, dass Benutzer sudo verwenden müssen, um 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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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 im python-mysql-Verzeichnis. Beachten Sie, dass der Dateiname großgeschrieben werden muss.

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.

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:

# 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:

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:

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