In pratica per avviare un container faccio:
docker run a8asd8f9asdf0
In tal caso, cosa fa:
docker start
fare?
Nel manuale dice
Avviare uno o più contenitori arrestati
execute?
In pratica per avviare un container faccio:
docker run a8asd8f9asdf0
In tal caso, cosa fa:
docker start
fare?
Nel manuale dice
Avviare uno o più contenitori arrestati
execute?
Risposte:
Questa è una domanda molto importante e la risposta è molto semplice, ma fondamentale:
docker run IMAGE_ID e non docker run CONTAINER_IDdocker stop CONTAINER_ID, è possibile riavviare lo stesso contenitore con il comando docker start CONTAINER_IDe i dati e le impostazioni saranno gli stessi.docker rm container_id). D'altra parte, i dati sui volumi sopravvivono alla rimozione del contenitore a meno che l' -vopzione non sia esplicitamente fornita sulla riga di comando. La posizione del volume sul sistema host può essere ispezionata direttamente. Vedi questo articolo
& alla fine della runriga di comando? Ne ho bisogno come servizio continuo (24 ore)
runesegue un'immaginestartavvia un contenitore .Il docker rundocumento menziona:
Il
docker runcomando crea prima un livello contenitore scrivibile sull'immagine specificata, quindi lo avvia utilizzando il comando specificato.Cioè, l' esecuzione della finestra mobile è equivalente all'API
/containers/createallora/containers/(id)/start.
Non si esegue un contenitore esistente, si esegue la finestra mobile ad esso (dalla finestra mobile 1.3) .
È possibile riavviare un contenitore uscito .
-iad docker runun processo interattivo? Voglio dire, la docker run ha bisogno di un'immagine per eseguire un container.
Spiegazione con un esempio:
Considera di avere un'immagine di gioco (iso) nel tuo computer.
Quando si runmonta l'immagine come unità virtuale, viene creata un'unità virtuale con tutti i contenuti del gioco nell'unità virtuale e il file di installazione del gioco viene avviato automaticamente. [Esecuzione dell'immagine docker: creazione di un contenitore e avvio.]
Ma quando tu stop(simile a docker stop), l'unità virtuale esiste ancora ma interrompe tutti i processi. [Poiché il contenitore esiste fino a quando non viene eliminato]
E quando lo fai start(simile all'avvio della finestra mobile), dall'unità virtuale i file dei giochi iniziano la sua esecuzione. [avvio del contenitore esistente]
In questo esempio - L'immagine del gioco è l'immagine Docker e l'unità virtuale è il tuo contenitore.
La risposta di daniele3004 è già abbastanza buona.
Solo una formula veloce e sporca per le persone come me che si confondono rune startdi volta in volta:
docker run [...]= docker pull [...]+docker start [...]
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.(fonte: docs.docker.com/engine/reference/commandline/run )
runcomando crea un contenitore dall'immagine e quindi avvia il processo di root su questo contenitore. Eseguirlo con run --rmflag ti risparmierebbe il problema di rimuovere in seguito l'inutile contenitore morto e ti permetterebbe di ignorare l'esistenza docker starte il docker removetutto.
run comando fa alcune cose diverse:
docker run --name dname image_name bash -c "whoami"
docker psbash -c "whoami". Se uno viene eseguito docker run --name dname image_namesenza un comando per eseguire il contenitore andrebbe immediatamente in stato di arresto.docker removeprima di avviare il contenitore con lo stesso nome.Come rimuovere il contenitore una volta che è stato arrestato automaticamente? Aggiungi un--rmflag alruncomando:
docker run --rm --name dname image_name bash -c "whoami"
Come eseguire più comandi in un singolo contenitore? Impedendo la morte del processo di root. Questo può essere fatto eseguendo alcuni comandi inutili all'inizio con--detachedflag e quindi usando "esegui" per eseguire i comandi effettivi:
docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
Perché allora abbiamo bisogno docker stop? Per fermare questo contenitore persistente che abbiamo lanciato nello snippet precedente con il comando infinitotail -f /dev/null.