Como ya hemos visto, existe una estrecha interacción entre una Docker Image y un Container. ¿Qué características diferencian estos conceptos?
En primer lugar, observamos que una imagen Docker es inerte. Solo ocupa algo de espacio en la memoria, pero por lo demás no consume ningún recurso del sistema. Además, una Docker Image es inmutable una vez se crea, por lo que es un medio de “solo lectura” o protegido contra la escritura. Una pequeña nota al respecto: sí, es posible añadir cambios a una imagen Docker existente. Lo que ocurre es que esto crea una nueva imagen; la imagen original sigue existiendo en la versión no modificada.
Como hemos mencionado anteriormente, es posible crear tantos contenedores similares como queramos a partir de una imagen Docker. Entonces, ¿qué diferencia exactamente a un contenedor Docker de una imagen? Un contenedor Docker es una instancia en funcionamiento (deberíamos decir, en ejecución) de una imagen Docker. Como cualquier software que se ejecuta en un ordenador, un contenedor Docker en funcionamiento consume recursos del sistema como memoria y ciclos de CPU. Además, el estado de un contenedor cambia a lo largo de su vida.
Si esta descripción te parece demasiado abstracta, quizá te sea de ayuda un ejemplo sencillo del día a día. Imagínate que una Docker Image es un DVD. El DVD como tal es inerte; está en su carcasa y no hace nada. Sin embargo, ocupa permanentemente todo y al mismo tiempo un espacio limitado. Solo cuando se reproduce en un entorno especial (un reproductor de DVD), el contenido “cobra vida”.
Al igual que la película creada para reproducirse en DVD, un contenedor Docker en ejecución tiene un estado. En el caso de una película, son el tiempo de reproducción actual, el idioma seleccionado, los subtítulos, etc. Este estado cambia con el tiempo, y una película en reproducción consume constantemente electricidad en el proceso. Al igual que los contenedores similares pueden iniciarse desde una imagen Docker tantas veces como se desee, la película de un DVD puede reproducirse una y otra vez. Además, la película en ejecución puede detenerse y reiniciarse, algo que también es posible con un contenedor Docker.