tag library images imagenes hub dockers container docker containers lifecycle

docker - library - ¿Los contenedores acoplables retienen los cambios de archivos?



dockers images (2)

¿Tengo entendido que una vez que el contenedor se detiene / finaliza (es decir, sale después de una sesión interactiva), ese contenedor se va junto con todos los cambios de archivos?

No, un contenedor persiste después de que sale, a menos que lo haya iniciado usando el argumento --rm para docker run el --rm . Considera esto:

$ docker run -it busybox sh / # date > example_file / # exit

Como salimos de nuestro shell, el contenedor ya no se está ejecutando:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Pero si tuviéramos la opción -a , podemos verla:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79aee3e2774e busybox:latest "sh" About a minute ago Exited (0) 54 seconds ago loving_fermat

Y podemos reiniciarlo y volver a conectarlo:

$ docker start 79aee3e2774e $ docker attach 79aee3e2774e <i press RETURN> / #

Y el archivo que creamos anteriormente todavía está allí:

/ # cat example_file Wed Feb 18 01:51:38 UTC 2015 / #

Puede usar el comando docker commit para guardar el contenido del contenedor en una nueva imagen, que luego puede usar para iniciar nuevos contenedores o compartir con otra persona, etc. Sin embargo, tenga en cuenta que si se encuentra regularmente usando docker commit probablemente te estás haciendo un flaco servicio. En general, es más manejable considerar los contenedores como de solo lectura y generar nuevas imágenes usando una compilación Dockerfile y acoplador.

Con este modelo, los datos normalmente se mantienen externos al contenedor, ya sea a través de montajes de volumen de host o utilizando un contenedor de solo datos.

Esta es una pregunta muy básica, pero estoy luchando un poco y me gustaría asegurarme de que entiendo correctamente.

Después de iniciar un contenedor desde una imagen y realizar algunos cambios a los archivos (es decir, algunos datos almacenados en el DB de una WebApp que se ejecuta en el contenedor), ¿cuál es la forma adecuada de continuar trabajando con la misma fecha entre detener y reiniciar el contenedor?

¿Tengo entendido que una vez que el contenedor se detiene / finaliza (es decir, sale después de una sesión interactiva), ese contenedor se va junto con todos los cambios de archivos? Entonces, si quiero mantener algunos cambios de archivos, ¿debo enviar el estado del contenedor a una nueva imagen / nueva versión de la imagen?

Gracias, Julian


Puede ver contenedores terminados con docker ps -a

Puede guardar un contenedor terminado, con los cambios del sistema de archivos, en una imagen usando docker commit container_name new_image_name

También puede extraer archivos de datos del contenedor terminado con: docker cp containerID:/path/to/find/files /path/to/put/copy

Tenga en cuenta que también puede "planear con anticipación" y evitar atrapar datos que necesitará permanentemente dentro de un contenedor temporal haciendo que el contenedor monte un directorio desde el host, por ejemplo

docker run -v /dir/on/host:/dir/on/container -it ubuntu:14.04