Estoy probando Docker por primera vez y todavía no tengo un "modelo mental". Principiante total.
Todos los ejemplos que estoy viendo han incluido la --rm
bandera para ejecutar, como
docker run -it --rm ...
docker container run -it --rm ...
Pregunta:
¿Por qué estos comandos incluyen la --rm
bandera? Pensaría que si tuviera que tomarme la molestia de configurar o descargar un contenedor con las cosas buenas, ¿por qué eliminarlo? Quiero conservarlo para volver a usarlo.
Entonces, sé que tengo una idea equivocada de Docker.
docker
docker-container
momentos coincidentes
fuente
fuente
--rm
elimina el contenedor detenido (el quedocker run
crea), no la imagen en la que se basó (lo que descargó).docker run --help
debería ser útil. Si no desea eliminar el contenedor , puede pasarlo--rm
y es para limpiar automáticamente el contenedor y eliminar el sistema de archivos cuando el contenedor sale y no significa quitar las cosas del contenedor.Respuestas:
Los contenedores son simplemente una instancia de la imagen que usa para ejecutarlos. El estado mental al crear una aplicación en contenedor no es tomar un contenedor ubuntu nuevo y limpio, por ejemplo, y descargar las aplicaciones y configuraciones que desea tener en él, y luego dejar que se ejecute.
Debe tratar el contenedor como una instancia de su aplicación, pero su aplicación está incrustada en una imagen. El uso adecuado sería crear una imagen personalizada, en la que incrustar todos sus archivos, configuraciones, variables de entorno, etc., en la imagen. Lea más sobre Dockerfile y cómo se hace aquí.
Una vez que hizo eso, tiene una imagen que contiene todo, y para usar su aplicación, simplemente ejecute la imagen con la configuración de puerto adecuada u otras variables dinámicas, usando
docker run <your-image>
Ejecutar contenedores con
--rm
bandera es bueno para aquellos contenedores que usa por muy poco tiempo solo para lograr algo, por ejemplo, compilar su aplicación dentro de un contenedor, o simplemente probar algo que funciona, y luego sabe que es un contenedor de corta duración y usted dígale a su demonio Docker que una vez que termine de ejecutarse, borre todo lo relacionado con él y ahorre espacio en el disco.fuente
--rm
cuando el usuario cierra la ventana de la terminal? es decir, no se ejecuta deliberadamenteexit
en el shell contenedor, sino que simplemente cierra la ventana GUI del terminal. He notado que los contenedores no se eliminan en este caso.La bandera
--rm
se usa cuando necesita que se elimine el contenedor después de que se complete la tarea.Esto es adecuado para pequeñas pruebas o propósitos POC y ahorra el dolor de cabeza para el mantenimiento de la casa.
fuente
de https://docs.docker.com/engine/reference/run/#clean-up---rm
En pocas palabras: es útil mantener el host limpio de contenedores detenidos y no utilizados.
fuente
Utilizo
--rm
cuando me conecto a contenedores en ejecución para realizar algunas acciones como la copia de seguridad de la base de datos o la copia de archivos. Aquí hay un ejemplo: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
Lo anterior conectará un contenedor en ejecución llamado 'app_postgres_1' y creará una copia de seguridad. Una vez que se completa el comando de copia de seguridad, el contenedor se elimina por completo.
fuente