docker run: perché usare --rm (docker newbie)


105

Sto provando docker per la prima volta e non ho ancora un "modello mentale". Principiante totale.

Tutti gli esempi che sto guardando hanno incluso la --rmbandiera da eseguire, come

docker run -it --rm ...
docker container run -it --rm ...

Domanda:

Perché questi comandi includono il --rmflag? Penserei che se dovessi provare a configurare o scaricare un contenitore con le cose buone al suo interno, perché rimuoverlo? Voglio tenerlo per usarlo di nuovo.

Quindi, so di avere un'idea sbagliata di docker.


5
--rmrimuove il contenitore bloccato (quello docker runcreato), non l'immagine su cui era basato (quello che hai scaricato).
Ry-

docker run --helpdovrebbe essere utile. Se non vuoi rimuovere il container , puoi passarlo
1818

1
deve essere --rmed è per pulire automaticamente il contenitore e rimuovere il file system quando il contenitore esce e non significa rimuovere le cose dal contenitore.
Mahattam

2
Non scarichi contenitori, scarichi immagini. Leggi qui per conoscere le differenze tra immagini e contenitori: docs.docker.com/engine/docker-overview/#docker-objects
axiac

Risposte:


95

I contenitori sono semplicemente un'istanza dell'immagine che utilizzi per eseguirli. Lo stato d'animo quando si crea un'app containerizzata non è prendere un nuovo e pulito container ubuntu, ad esempio, e scaricare le app e le configurazioni che si desidera avere al suo interno, quindi lasciarlo funzionare.

Dovresti considerare il contenitore come un'istanza della tua applicazione, ma la tua applicazione è incorporata in un'immagine. L'utilizzo corretto sarebbe creare un'immagine personalizzata, in cui incorporare tutti i file, le configurazioni, le variabili di ambiente, ecc. Nell'immagine. Maggiori informazioni su Dockerfile e su come è fatto qui

Una volta fatto ciò, hai un'immagine che contiene tutto e per utilizzare la tua applicazione, devi solo eseguire l'immagine con le impostazioni della porta appropriate o altre variabili dinamiche, usando docker run <your-image>

Esecuzione di container con --rm flag è utile per quei contenitori che usi per brevissimo tempo solo per realizzare qualcosa, ad esempio, compilare la tua applicazione all'interno di un contenitore, o semplicemente testare qualcosa che funzioni, e poi sai che è un contenitore di breve durata e tu dì al tuo demone Docker che, una volta eseguito, cancella tutto ciò che lo riguarda e salva lo spazio su disco.


Il passaggio delle variabili di ambiente a docker run sarebbe un'alternativa migliore. In questo modo puoi iniziare con diverse configurazioni (es. Produzione contro preproduzione)?
SCO

L'ambiente Prod vs Test è un buon esempio in cui probabilmente vorresti usare env vars per fare la separazione e far funzionare la tua app dalla stessa immagine, ma con impostazioni diverse per ogni env
buddy123

C'è un modo per eliminare automaticamente i contenitori che vengono avviati utilizzando --rmquando l'utente chiude la finestra del terminale. cioè non viene eseguito deliberatamente exitnella shell del contenitore, ma chiude semplicemente la finestra della GUI del terminale. Ho notato che i contenitori non vengono eliminati in questo caso.
venkrao

20

Il flag --rmviene utilizzato quando è necessario eliminare il contenitore dopo che l'attività è stata completata.

Questo è adatto per piccoli test o scopi POC e consente di risparmiare il mal di testa per la pulizia della casa.


16

da https://docs.docker.com/engine/reference/run/#clean-up---rm

Per impostazione predefinita, il file system di un contenitore persiste anche dopo la chiusura del contenitore. Ciò rende il debug molto più semplice (poiché puoi ispezionare lo stato finale) e conservi tutti i tuoi dati per impostazione predefinita. Ma se si eseguono processi in primo piano a breve termine, questi file system contenitore possono davvero accumularsi. Se invece desideri che Docker pulisca automaticamente il contenitore e rimuova il file system quando il contenitore esce, puoi aggiungere il flag --rm

In poche parole: è utile mantenere l'host pulito da contenitori fermi e non utilizzati.


1

Uso --rmquando mi connetto a contenitori in esecuzione per eseguire alcune azioni come il backup del database o la copia di file. Ecco un esempio:

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

Quanto sopra collegherà un contenitore in esecuzione denominato "app_postgres_1" e creerà un backup. Una volta completato il comando di backup, il contenitore viene completamente eliminato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.