Geschätzte Lesezeit: 3 Minuten
Die meisten Dockerdateien starten von einem übergeordneten Image. Wenn Sie die vollständige Kontrolle über den Inhalt Ihres Images benötigen, müssen Sie stattdessen ein Basis-Image erstellen.
-
Ein Eltern-Image ist das Image, auf dem Ihr Image basiert. Es bezieht sich auf den Inhalt der Direktive
FROM
in derDockerfile. Jede nachfolgende Deklaration im Dockerfile modifiziert dieses Eltern-Image. Die meisten Dockerfiles beginnen mit einem Parent-Image und nicht mit einem Base-Image. -
Ein Base-Image hat die Direktive
FROM scratch
in seiner Dockerfile.
In diesem Thema werden Ihnen verschiedene Möglichkeiten gezeigt, ein Base-Image zu erstellen. Der spezifische Prozess hängt stark von der Linux-Distribution ab, die Sie paketieren möchten. Im Folgenden finden Sie einige Beispiele, und Sie sind eingeladen, Pull-Requests einzureichen, um neue Beispiele beizusteuern.
Erstellen Sie ein vollständiges Image mit tar
Im Allgemeinen sollten Sie mit einem funktionierenden Rechner beginnen, auf dem die Distribution läuft, die Sie als Basis-Image paketieren möchten, obwohl das für einige Tools wie DebiansDebootstrap, das Sie auch zum Erstellen von Ubuntu-Images verwenden können, nicht erforderlich ist.
Ein Ubuntu-Parent-Image kann ganz einfach so erstellt werden:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Es gibt weitere Beispielskripte zum Erstellen von Parent-Images im DockerGitHub-Repository.
Erstellen eines einfachen Parent-Images mit Scratch
Sie können das reservierte, minimale Image von Docker, scratch
, als Ausgangspunkt für den Bau von Containern verwenden. Die Verwendung des scratch
„image“ signalisiert dem Build-Prozess, dass der nächste Befehl im Dockerfile
die erste Dateisystemebene in Ihrem Image sein soll.
Während scratch
im Repository von Docker auf dem Hub erscheint, können Sie es nicht abrufen, ausführen oder ein Image mit dem Namen scratch
kennzeichnen. Stattdessen können Sie in Ihrem Dockerfile
darauf verweisen. Um zum Beispiel einen minimalen Container mitscratch
zu erstellen:
FROM scratchADD hello /CMD
Angenommen, Sie haben das ausführbare Beispiel „hello“ anhand der Anweisungen aufhttps://github.com/docker-library/hello-world/,und Sie haben es mit dem -static
-Flag kompiliert, können Sie dieses Dockerimage mit diesem docker build
-Befehl bauen:
docker build --tag hello .
Vergessen Sie nicht das .
Zeichen am Ende, das den Build-Kontext auf das aktuelle Verzeichnis setzt.
Hinweis: Da Docker Desktop für Mac und Docker Desktop für Windows eine Linux-VM verwenden, benötigen Sie eine Linux-Binärdatei und nicht eine Mac- oder Windows-Binärdatei.Sie können einen Docker-Container verwenden, um es zu erstellen:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Um Ihr neues Image auszuführen, verwenden Sie den docker run
Befehl:
docker run --rm hello
Dieses Beispiel erzeugt das in den Tutorials verwendete Hallo-Welt-Bild.Wenn Sie es ausprobieren möchten, können Sie das Bild-Repos klonen.
Weitere Ressourcen
Es gibt viele Ressourcen, die Ihnen beim Schreiben Ihrer Dockerfile
helfen.