Sie verwenden Start für einen Container, wenn Sie diesen Container zuvor gestoppt haben. Sie verwenden laufen auf ein Bild, wenn Sie ealier hatte entfernt einen Behälter dieses Bildes. Dies ist die grundlegende Verwendung, denke ich.
CodeSlave
Antworten:
350
Dies ist eine sehr wichtige Frage und die Antwort ist sehr einfach, aber grundlegend:
Ausführen: Erstellen Sie einen neuen Container eines Bildes und führen Sie den Container aus. Sie können N Klone desselben Bildes erstellen. Der Befehl lautet:
docker run IMAGE_IDund nichtdocker run CONTAINER_ID
Start: Starten Sie einen zuvor gestoppten Container. Wenn Sie beispielsweise eine Datenbank mit dem Befehl gestoppt haben docker stop CONTAINER_ID, können Sie denselben Container mit dem Befehl neu starten docker start CONTAINER_ID, und die Daten und Einstellungen sind identisch.
Muss für den gestoppten Container ein Volume erstellt werden, damit die Daten erhalten bleiben?
Logan Phillips
@LoganPhillips Der Lebenszyklusunterschied zwischen Dateien, die in die Standard- Union- Dateisystemschicht des Containers geschrieben wurden, und Dateien, die in Volumes geschrieben wurden, ist: Die Daten der Union-Dateisystemschicht des Containers gehen beim Entfernen des Containers ( docker rm container_id) immer verloren . Auf der anderen Seite überleben Volumendaten das Entfernen des Containers, sofern die -vOption nicht explizit in der Befehlszeile angegeben ist. Der Volume-Standort auf dem Host-System kann direkt überprüft werden. Siehe diesen Artikel
Stphane
Über den Prozess & am Ende der runKommandozeile benötigen ? Ich brauche es als Countinous (24 Stunden) Service
Peter Krauss
Was ist dann der Zweck von "Docker erstellen"? Wie / wann würde das verwendet werden?
@Tarik nicht müssen Sie hinzufügen , -ium docker runeinen interaktiven Prozess? Ich meine, Docker Run benötigt ein Image, um einen Container auszuführen.
VonC
10
Jemand scheint einen Raum zu haben, um eine ausführlichere Antwort zu schreiben. Die Antwort sieht nicht sehr erklärend aus.
Angenommen, Sie haben ein Spielbild (ISO) auf Ihrem Computer.
Wenn Sie run(Ihr Image als virtuelles Laufwerk bereitstellen), wird ein virtuelles Laufwerk mit allen Spielinhalten auf dem virtuellen Laufwerk erstellt und die Spielinstallationsdatei wird automatisch gestartet. [Ausführen Ihres Docker-Images - Erstellen eines Containers und anschließendes Starten.]
Wenn Sie es jedoch stop(ähnlich wie Docker) stoppen, ist das virtuelle Laufwerk weiterhin vorhanden, stoppt jedoch alle Prozesse. [Da der Container existiert, bis er nicht gelöscht wird]
Und wenn Sie dies tun start(ähnlich wie beim Docker-Start), starten die Spieledateien vom virtuellen Laufwerk aus ihre Ausführung. [Starten des vorhandenen Containers]
In diesem Beispiel - Das Spiel-Image ist Ihr Docker-Image und das virtuelle Laufwerk ist Ihr Container.
Das ist nicht ganz richtig. Laut dem offiziellen Dokument "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(Quelle: docs.docker.com/engine/reference/commandline/run )
sshh
2
runDer Befehl erstellt einen Container aus dem Image und startet dann den Root-Prozess für diesen Container. Wenn Sie es mit run --rmFlag ausführen, sparen Sie sich die Mühe, den nutzlosen toten Container anschließend zu entfernen, und können die Existenz von docker startund docker removeinsgesamt ignorieren .
run Befehl macht ein paar verschiedene Dinge:
docker run --name dname image_name bash -c "whoami"
Erstellt einen Container aus dem Bild. Zu diesem Zeitpunkt würde der Container eine ID haben, könnte einen Namen haben, wenn einer angegeben wird, wird in angezeigtdocker ps
Startet / führt den Root-Prozess des Containers aus. Im obigen Code würde das ausgeführt werden bash -c "whoami". Wenn man docker run --name dname image_nameohne einen Befehl zum Ausführen des Containers läuft , wird der Container sofort gestoppt.
Sobald der Root-Prozess abgeschlossen ist, wird der Container gestoppt. Zu diesem Zeitpunkt ist es so ziemlich nutzlos. Man kann nichts mehr ausführen oder den Container wiederbeleben. Grundsätzlich gibt es zwei Möglichkeiten, den gestoppten Container zu verlassen: Entfernen Sie den Container oder erstellen Sie einen Prüfpunkt (dh ein Bild) aus dem gestoppten Container, um etwas anderes auszuführen. Man muss laufen, docker removebevor man einen Container unter demselben Namen startet.
Wie entferne ich einen Behälter, wenn er automatisch gestoppt wird? Fügen Sie--rmdemrunBefehleinFlag hinzu:
docker run --rm --name dname image_name bash -c "whoami"
Wie führe ich mehrere Befehle in einem einzigen Container aus? Indem verhindert wird, dass dieser Wurzelprozess stirbt. Dies kann erreicht werden, indem ein nutzloser Befehl beim Start mit dem--detachedFlag ausgeführt wird und dann "Ausführen" verwendet wird, um die tatsächlichen Befehle auszuführen:
Warum brauchen wir docker stopdann? Um diesen verweilenden Container zu stoppen, den wir im vorherigen Snippet mit dem Endlosbefehl gestartet habentail -f /dev/null.
execute
?Antworten:
Dies ist eine sehr wichtige Frage und die Antwort ist sehr einfach, aber grundlegend:
docker run IMAGE_ID
und nichtdocker run CONTAINER_ID
docker stop CONTAINER_ID
, können Sie denselben Container mit dem Befehl neu startendocker start CONTAINER_ID
, und die Daten und Einstellungen sind identisch.quelle
docker rm container_id
) immer verloren . Auf der anderen Seite überleben Volumendaten das Entfernen des Containers, sofern die-v
Option nicht explizit in der Befehlszeile angegeben ist. Der Volume-Standort auf dem Host-System kann direkt überprüft werden. Siehe diesen Artikel&
am Ende derrun
Kommandozeile benötigen ? Ich brauche es als Countinous (24 Stunden) Servicerun
führt ein Bild ausstart
startet einen Container .Der
docker run
Arzt erwähnt:Sie führen keinen vorhandenen Container aus, sondern führen Docker aus (seit Docker 1.3) .
Sie können einen verlassenen Container neu starten .
quelle
-i
umdocker run
einen interaktiven Prozess? Ich meine, Docker Run benötigt ein Image, um einen Container auszuführen.Erklärung mit einem Beispiel:
Angenommen, Sie haben ein Spielbild (ISO) auf Ihrem Computer.
Wenn Sie
run
(Ihr Image als virtuelles Laufwerk bereitstellen), wird ein virtuelles Laufwerk mit allen Spielinhalten auf dem virtuellen Laufwerk erstellt und die Spielinstallationsdatei wird automatisch gestartet. [Ausführen Ihres Docker-Images - Erstellen eines Containers und anschließendes Starten.]Wenn Sie es jedoch
stop
(ähnlich wie Docker) stoppen, ist das virtuelle Laufwerk weiterhin vorhanden, stoppt jedoch alle Prozesse. [Da der Container existiert, bis er nicht gelöscht wird]Und wenn Sie dies tun
start
(ähnlich wie beim Docker-Start), starten die Spieledateien vom virtuellen Laufwerk aus ihre Ausführung. [Starten des vorhandenen Containers]In diesem Beispiel - Das Spiel-Image ist Ihr Docker-Image und das virtuelle Laufwerk ist Ihr Container.
quelle
Die Antwort von daniele3004 ist schon ziemlich gut.
Nur eine schnelle und schmutzige Formel für Leute wie ich, mischt
run
undstart
von Zeit zu Zeit:docker run [...]
=docker pull [...]
+docker start [...]
quelle
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(Quelle: docs.docker.com/engine/reference/commandline/run )run
Der Befehl erstellt einen Container aus dem Image und startet dann den Root-Prozess für diesen Container. Wenn Sie es mitrun --rm
Flag ausführen, sparen Sie sich die Mühe, den nutzlosen toten Container anschließend zu entfernen, und können die Existenz vondocker start
unddocker remove
insgesamt ignorieren .run
Befehl macht ein paar verschiedene Dinge:docker ps
bash -c "whoami"
. Wenn mandocker run --name dname image_name
ohne einen Befehl zum Ausführen des Containers läuft , wird der Container sofort gestoppt.docker remove
bevor man einen Container unter demselben Namen startet.Wie entferne ich einen Behälter, wenn er automatisch gestoppt wird? Fügen Sie
--rm
demrun
BefehleinFlag hinzu:Wie führe ich mehrere Befehle in einem einzigen Container aus? Indem verhindert wird, dass dieser Wurzelprozess stirbt. Dies kann erreicht werden, indem ein nutzloser Befehl beim Start mit dem
--detached
Flag ausgeführt wird und dann "Ausführen" verwendet wird, um die tatsächlichen Befehle auszuführen:Warum brauchen wir
docker stop
dann? Um diesen verweilenden Container zu stoppen, den wir im vorherigen Snippet mit dem Endlosbefehl gestartet habentail -f /dev/null
.quelle