Ich verfolge die CoreOS Docker-Dokumentation und erwähne das Starten von Containern mit Befehlen wie:
docker run someImageName /bin/somebinary
Wo someImageName
ist ein Bild? Wenn / bin / somebinary beendet wird, wird das Image nicht mehr ausgeführt.
Ich möchte einfach ein Image ausführen, ohne die auszuführenden Binärdateien anzugeben. Stattdessen möchte ich einfach die Dienste (z. B. systemd / sysvinit) ausführen, die normalerweise im Images-Betriebssystem ausgeführt werden .
Dies scheint die häufigste Aufgabe zu sein, die jemand jemals mit Docker ausführen möchte, aber der Versuch, ein Image ohne einen Befehl auszuführen, gibt Folgendes zurück:
2014/02/05 14:49:19 Error: create: No command specified
Wie kann ich einen Docker-Container starten und ein vollständiges Betriebssystem ausführen, anstatt einen Befehl anzugeben ?
Antworten:
Wie hier dokumentiert, führen Sie
/sbin/init
den Befehl einfach wie jedes andere Unix aus, das vom Einzelbenutzermodus in den Mehrbenutzermodus bootet.https://stackoverflow.com/questions/19332662/start-full-container-in-docker
Container können ausgereifte Betriebssysteme sein, müssen es aber nicht sein (und VMs sind auch nicht komplizierter zu konfigurieren und zu verwalten).
Ich würde sagen, der Sinn von Docker ist es, Anwendungscontainer einfach zu gestalten, sodass Sie nur eine App konfigurieren müssen, nicht das gesamte Betriebssystem.
quelle
docker ps -notrunc
, um die Container-ID zu erhalten, und dannsudo /usr/sbin/lxc-attach -n containerID
in das laufende Image. Wie im anderen Poster erwähnt, brauche ich eigentlich keine zweite Init, also werde ich als nächstes die Container mit nur einem Befehl prüfen ...Docker ist ein System zur Verwaltung und Bereitstellung von Anwendungscontainern , nicht von Betriebssystemcontainern . Es scheint, als würden Sie einen Docker-Container mit dem Booten eines Betriebssystems in Konflikt bringen.
Bei Ihren Docker-Containern sollte es sich um Einzweckanwendungen mit sehr engem Anwendungsbereich handeln, die mit einem einzigen Befehl gestartet werden können. Wenn Sie nach etwas Komplexerem suchen, ist Docker nicht die Lösung, die Sie suchen. In diesem Fall schauen Sie sich KVM, ESXi, OpenVZ, LXD usw. an.
Wenn Sie nur suchen, wie Sie einen Standard
CMD
undENTRYPOINT
Ihre Container festlegen können , können Sie dies während der Erstellung mithilfe einer Docker-Datei tun.quelle
/sbin/init
, muss es aber nicht haben . Sie haben wahrscheinlich einen Standard-Ubuntu-Container oder ähnliches verwendet. In diesen Behältern befinden sich viele Teile, die entfernt werden können, wenn Sie dies wünschen.Um ein vollständiges Betriebssystem in einem Container auszuführen, erstellen Sie die folgende Docker-Datei:
Erstellen und starten Sie den Container und geben Sie eine Shell ein, um die darin ausgeführten Dienste zu untersuchen:
Komplette Systemdienstleistungen im Container. Schön.
quelle
Führen Sie einfach so oft wie nötig das gleiche Image aus. Es werden neue Container erstellt, die dann gestartet und gestoppt werden können, wobei jeweils eine eigene Konfiguration gespeichert wird. Geben Sie zu Ihrer Bequemlichkeit jedem Ihrer Container einen Namen mit "--name".
Fi:
Das ist es.
Danach haben Sie Ihre Container für immer erstellt und können sie wie VMs starten und stoppen.
Um in den Container zu steigen und das zu tun, was Sie tun möchten:
quelle