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