¿Qué es una imagen de contenedor?
Una imagen de contenedor es una plantilla de solo lectura con instrucciones para crear un contenedor. La imagen contiene el código que se ejecutará, incluyendo cualquier definición de librerías y dependencias que tu código necesite. A menudo, una imagen se basa en otra imagen con algunas personalizaciones adicionales. Es importante notar que estas imágenes no son solo un bloque monolítico, sino que están compuestas por muchas capas (layers). Veremos qué significa esto en esta sección.
Dockerfiles e imágenes de Docker
Ahora que entendemos los conceptos generales sobre qué es una imagen de contenedor, veamos cómo se aplica esto a las imágenes de Docker, que también pueden conocerse a través de un Dockerfile. Al igual que la imagen de contenedor mencionada anteriormente, los Dockerfiles y las imágenes de Docker proporcionan un entorno de aplicación de tiempo de ejecución portátil, empaquetan aplicaciones y dependencias en un único artefacto inmutable, brindan a los usuarios la opción de ejecutar diferentes versiones de aplicaciones simultáneamente y ofrecen ciclos de desarrollo y despliegue más rápidos.
Arquitectura de capas de las imágenes de contenedor de Docker
Las imágenes de contenedor de Docker siguen lo que se conoce como una arquitectura de capas (layered architecture). A continuación se muestra un ejemplo de un Dockerfile básico y, para demostrarlo, desglosemos qué significa realmente una arquitectura de capas. Una imagen de Docker se construye a partir de una serie de capas. Cada capa representa una instrucción en el Dockerfile de la imagen. Cada capa, excepto la última, es de solo lectura. Considera el siguiente Dockerfile:
FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.pyEste Dockerfile contiene cuatro comandos, cada uno de los cuales crea una capa. La instrucción FROM comienza creando una capa a partir de la imagen ubuntu:15.04. El comando COPY agrega algunos archivos del directorio actual de tu cliente Docker. El comando RUN construye tu aplicación usando el comando make. Finalmente, la última capa especifica qué comando ejecutar dentro del contenedor.
Cada capa es solo un conjunto de diferencias con respecto a la capa anterior. Las capas se apilan unas sobre otras. Cuando creas un nuevo contenedor, agregas una nueva capa de escritura (writable layer) encima de las capas subyacentes. Esta capa a menudo se llama la "capa del contenedor". Todos los cambios realizados en el contenedor en ejecución, como escribir nuevos archivos, modificar archivos existentes y eliminar archivos, se escriben en esta delgada capa de contenedor escribible. El diagrama a continuación muestra un contenedor basado en la imagen de Ubuntu 15.04.

¿Qué pasaría si cambiaras algo en el Dockerfile y volvieras a construir la imagen? Uno de los mayores beneficios de usar Dockerfiles para construir tus imágenes de contenedor es que solo se reconstruyen las capas modificadas. Esto es lo que hace que las imágenes de contenedor sean ligeras, pequeñas y rápidas en comparación con otras tecnologías de virtualización.
Resumen
Los Dockerfiles son la fuente de verdad cuando se trata de construir y ejecutar imágenes de Docker. El Dockerfile es un artefacto que creas y que, a su vez, produce una imagen de Docker cuando lo construyes. El Dockerfile incluye instrucciones sobre exactamente cómo construir esa imagen y qué debe incluir. Una excelente manera de pensar en los Dockerfiles es que no son diferentes a seguir las instrucciones para cocinar tu comida favorita. Los Dockerfiles incluyen instrucciones paso a paso sobre cómo debe construirse tu imagen de contenedor. Ejemplos podrían ser obtener una versión específica de Node.js o incluir instrucciones para instalar programas como jq, de modo que cuando ejecutes tu contenedor, tengas todo lo que necesitas y elimines la necesidad de instalar manualmente cualquier herramienta o dependencia necesaria para ejecutar el contenedor correctamente.
Una vez que hayas construido tu imagen de Docker a partir de las instrucciones establecidas en el Dockerfile, el siguiente paso es enviar (push) esa imagen a un repositorio de imágenes como Docker Hub (discutiremos qué significa esto en la siguiente sección) y luego tendrás la opción de ejecutar ese contenedor localmente para ver que funciona o desplegar esa imagen en Amazon ECS (también discutiremos qué significa esto más adelante).
En esta sección cubrimos qué es un Dockerfile y cómo se usa para crear imágenes de contenedor. En la siguiente sección, cubriremos dónde podemos almacenar estas imágenes, también conocido como Docker Hub.
