2014-03-01 1 views
21

Ich habe einen Docker-Daemon auf meinem GUEST OS, der CentOS ist. Ich möchte darüber hinaus Software-Services isoliert installieren und brauche kein weiteres Betriebssystem-Image in meinem Docker-Container.Welches Docker-Basis-Image sollte verwendet werden, um Apps in einem Container ohne zusätzliches Betriebssystem zu installieren?

Ich will nur mit den zusätzlichen Programmen und Bibliotheken für die Softwareanwendung einen Docker Container habe ich installieren werde.

Gibt es ein "whiteglove/blank" Basisbild in Docker ich verwenden kann? Ich möchte einen sehr schlanken Container, der als Ausgangspunkt verwendet, was mein GUEST OS zu bieten hat. Ist das möglich ?

Antwort

25

Wonach Sie fragen, ist mit Docker nicht sofort einsatzbereit. Jedes Docker-Image besitzt ein eigenes Root-Dateisystem, auf dem eine Art Betriebssystem installiert sein muss.

Ihre Optionen sind:

  1. eine minimale Grundbild verwenden, wie the BusyBox image. Dies gibt Ihnen das absolute Minimum, das Sie benötigen, um einen Container zum Laufen zu bringen.

  2. Verwenden Sie the CentOS base image, in diesem Fall wird in Ihrem Container das gleiche oder ein sehr ähnliches Betriebssystem ausgeführt.

Der Grund Docker Bilder wie diese ist, weil sie tragbar ist gemeint sind. Jedes Docker-Image soll unabhängig vom Betriebssystem überall ausgeführt werden, wo Docker läuft. Dies bedeutet, dass das Docker-Image ein vollständiges Root-Dateisystem und eine vollständige Betriebssysteminstallation enthalten muss.

Was Sie tun können, wenn Sie Dinge aus dem Host-Betriebssystem benötigen, ist share a directory using Docker volumes. Dies ist jedoch im Allgemeinen so zu verstehen, dass es zum Montieren von Datenverzeichnissen verwendet werden kann, und dennoch ist es erforderlich, dass das Docker-Image ein Betriebssystem aufweist.


sagte, dass, wenn Sie eine haben statisch gelinkte Binärdatei, die absolut keine Abhängigkeiten hat, wird es einfach ein sehr minimal Bild zu erzeugen. Dies wird als "Microcontainer" bezeichnet, und insbesondere Go ist gut geeignet, um diese zu erzeugen. Hier ist some further reading on microcontainers and how to produce them.


Eine andere Option, die Sie in aussehen könnte, wenn alles, was Sie wollen, ist das Ressourcenmanagement Teil von Containern ist using lxc-execute, as described in this answer. Aber du verlierst auch alle anderen netten Docker-Funktionen. Leider versuchen Sie nicht, wofür Docker eigentlich gedacht ist.

+1

Gibt es einen Vorteil oder Nachteil bei der Auswahl eines Basis-Image-Betriebssystems, das anders ist? Ist es nur persönliche Vorliebe? Stellt das OS des Basis-Images tatsächlich verschiedene Dienstprogramme im Docker-Container bereit? – CMCDragonkai

+1

@CMCDragonkai, es ist eine Frage der Anwendungsanforderung ebenso. Wenn die Anwendung Ihres Containers bestimmte Bibliotheken eines bestimmten Betriebssystems benötigt, sollten Sie definitiv mit diesem Betriebssystem arbeiten. Wenn Ihre Anwendung nahtlos auf generischen Linux-Distributionen und Releases funktioniert, dann können Sie sich für ein minimales Betriebssystem entscheiden, wie in diesem Thread angegeben (zB BusyBox). Oft geht es darum zu standardisieren, welche Arten von Containern Sie bereitstellen und wie Sie sich auf die Unterstützung dieser Betriebssysteme spezialisieren möchten. – gextra

5

Von Docker der best practices:

Wann immer möglich, aktuelles Amt Repositorys als Grundlage für Ihr Bild verwenden. Wir empfehlen das Debian-Image, da es sehr streng kontrolliert und extrem minimal gehalten wird (derzeit unter 100 MB), während es immer noch eine vollständige Distribution ist.

Was Sie verlangen, ist völlig gegen die Idee der Verwendung von Docker Containern. Sie wollen nicht, um irgendeine Zuverlässigkeit auf Ihrem GAST OS zu haben. Wenn Sie Ihren Docker nicht tragbar sind.

Wenn Sie einen Container erstellen, wollen Sie es auf jede Maschine, die läuft Docker laufen. Egal ob CentoOS, Ubuntu, Mac oder Microsoft Azure :)

Idealerweise gibt es keine Vorteile, dass Ihr Basiscontainer OS irgendetwas mit Ihrem Host-Betriebssystem zu tun hat.

+0

Beachten Sie, dass sich der Hinweis jetzt geändert hat: "Verwenden Sie nach Möglichkeit offizielle Archive als Basis für Ihr Image. Wir empfehlen das Alpine-Image, da es sehr streng kontrolliert und minimal gehalten wird (derzeit unter 5 MB), während es noch eine vollständige Distribution ist . " – m01

1

Für jeden Container müssen Sie mindestens ein Root-Dateisystem haben. Aus diesem Grund müssen Sie ein Basisimage mit dem Root-Dateisystem verwenden. Ihre Idee ist nicht völlig gegen das Container-Paradigma der Nutzung; Im Gegensatz zu VMs möchten wir, dass der Container minimal ist, ohne viele sich wiederholende Elemente, die er aus dem Underlayer-Betriebssystem nutzen kann.

Verwandte Themen