Wie kann ich mein eigenes Basis-Image für Docker erstellen?


97

Gemäß der Docker-Dokumentation müssen Sie zum Erstellen eines eigenen Images immer ein Basis-Image mithilfe der FROMAnweisung angeben .

Natürlich stehen im Docker-Index viele Bilder zur Auswahl , aber was ist, wenn ich meine eigenen erstellen möchte? Ist das möglich?

Das Image basebasiert auf Ubuntu, wenn ich es richtig verstehe, und ich möchte mit einem Debian-Image experimentieren. Außerdem möchte ich wirklich verstehen, wie Docker funktioniert, und das baseBild ist für mich immer noch eine Blackbox.


Bearbeiten: offizielle Dokumentation zum Erstellen eines Basis-Images


Ist egal. :-) Fragen hier müssen noch gemäß den Site-Richtlinien themenbezogen sein. Sie werden auf den Seiten des Hilfezentrums und der Tour behandelt . (Der Link dort scheint sich auch auf Entwickler von Docker-Containern zu beziehen.) Wenn Sie nach Ihrem eigenen Container-Image fragen, gibt es auf ihrer Website
Ken White,

@ KenWhite: relevante Meta-Frage: meta.stackexchange.com/questions/179249/…
Flimm

:-) Relevante Meta-Antwort zu diesem Zeitpunkt, die Antwort direkt über Ihrer. (Siehe insbesondere den zweiten Kommentar zu der Antwort, die ich verlinkt habe, über die Klarheit dessen, was Ihre Frage stellt.)
Ken White

9
@ Ken White: Die Frage ist, wie man ein Basis-Image "erstellt" und nicht, wie man ein "Image" bereitstellt. Flimm versucht, etwas zu programmieren, das später von ihm oder anderen bereitgestellt werden kann. Amazon EC2 ist bereitstellungsbezogen, aber ich denke, sie haben immer noch ein paar Programmierer, die programmierbares Zeug programmieren :). Das Erstellen von Basis-Images ist ein Beispiel für programmierte Dinge, die ich sagen würde.
Qkrijger

@qkrijger: Dies wird in der verknüpften Meta-Frage diskutiert. Da diese Diskussion offen ist, posten Sie bitte jede Diskussion über die Aktualität dort (wo der Konsens zu sein scheint, dass es sich nicht um ein "programmartiges" Thema handelt).
Ken White

Antworten:



32

Zitiert Solomon Hykes :

Mit "Docker-Import" können Sie ganz einfach einen neuen Container aus jedem Tarball erstellen. Beispielsweise:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

Vielleicht poste die Bearbeitung / Aktualisierung stattdessen in einem Kommentar, damit andere sie sehen können und vielleicht kann jemand die Bearbeitung erneut einreichen.
Bdoserror

1
@Flimm Warum sollte ich in diesem Fall sudo verwenden müssen? Führen Sie diese Befehle in Ihrem Benutzerverzeichnis aus, und Sie sollten keinen Grund für die Erhöhung von Berechtigungen haben. Sie erstellen ein Image und installieren es nicht.
Rancidfishbreath

Sie benötigen nicht einmal root für den normalen Docker-Gebrauch. Füge dich einfach der dockerGruppe hinzu.
Tekknolagi

1
Aber der von Flimm empfohlene Bindestrich im Importbefehl ist notwendig: docker import - flimm/mybaseanstelle vondocker import flimm/mybase
Daniel Alder

Das Eigentum an den Dateien im TAR hängt davon ab, ob Sie als Root ausgeführt werden oder nicht. Wenn nicht als root, dann debootstrapund tarsollte zumindest unter ausgeführt werden fakeroot.
Clacke

21

(Gutschrift an dadlinux) Informationen erhalten Sie unter http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , was besser erklärt wird

  1. Erstellen Sie die TAR-Dateien für Ihr Dateisystem, könnte einfach sein

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Übertragen Sie die TAR-Datei auf ein anderes Docker-System, wenn es nicht lokal installiert importist

    cat centos6-base.tar | docker import - centos6-base
    
  3. Jetzt können Sie dies überprüfen, indem Sie es ausführen.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Die Skripte von dotcloud kombinieren die ersten beiden Schritte miteinander, was mich verwirrt und am Anfang kompliziert aussieht.

Die offizielle Docker- Richtlinie verwendet debootstrapauch, um ein sauberes Dateisystem zu erstellen.

Sie können selbst beurteilen, wie Schritt 1 ausgeführt wird.


14

Um Ihr eigenes Bild von Grund auf neu zu erstellen, können Sie das scratchBild verwenden.

Wenn Sie das Scratch-Image verwenden, signalisieren Sie dem Erstellungsprozess, dass der nächste Befehl in der Docker-Datei die erste Dateisystemschicht in Ihrem Image sein soll.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
Dieses Plus importaus einer TAR-Datei sind die beiden kanonischen Antworten, und dieser Link ist die kanonische Ressource.
Clacke

7

Wenn Sie Ihr eigenes Basisbild erstellen möchten, würde ich mir zuerst die offiziellen Bilder ansehen , insbesondere stackbrewin diesem Repo.

Ansonsten gibt es im Docker-Repo selbst einige großartige Referenzen für minimale Betriebssystem-Images .

Zum Beispiel ist hier ein Skript für ein minimales Bogenbild zu machen und es gibt mehr hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.