En este artículo continuamos nuestra serie de Docker y nos metemos de lleno en algunos conceptos fundamentales de Dockerfile que nos va a permitir trabajar más cómodamente y mejor siguiendo las buenas prácticas tácitas de esta poderosa herramienta.

Crear una imagen en Docker es una de las partes más divertidas e interesantes de todo el proceso, y aunque siempre es recomendable trabajar dentro de lo posible con imágenes ya creadas por otros usuarios o empresas (ya que nos ahorra tiempo y minimiza los errores) crear una imagen a nuestra medida, aunque una tarea relativamente sencilla, puede esconder algunas consideraciones.

El comprenderlas y aplicarlas nos va a hacer la vida más fácil y a nuestro Dockerfile más sencillo de leer para nuestro equipo. 

Caché: el orden altera el resultado.

Antes de escribir un Dockerfile hay que entender qué es el cache y cómo funciona.

Cada línea de código es una capa que Docker guarda en caché al crear la imagen y a la cual le asigna un id. Esto nos permite trabajar más rápidamente ya que si una línea no se modificó, al volver a ejecutar el Dockerfile Docker primero corrobora si la tenemos disponible en caché y de encontrarla pasará a la siguiente línea.   

En el siguiente ejemplo tenemos seis capas. 

dockerfile_1

Una buena práctica es siempre comenzar de arriba hacia abajo con las capas que menos vamos a modificar, por esa razón siempre se comienza con la imagen base.

Podemos luego ver que estamos copiando archivos en la segunda capa antes de realizar un update. Pero si más adelante decidimos modificar nuestra app, todas las líneas posteriores aunque no tuviesen cambios se correrian nuevamente si o si.

Con lo cual el orden ideal sería:

dockerfile

En este ejemplo también podemos ejecutar el update y el upgrade en una sola línea ya que son dependientes entre sí. Con esto ganamos en velocidad y nos permite depurar más fácilmente.

dockerfile

Imágenes y versiones específicas.

Siempre es recomendable basarse en las imágenes oficiales ya que nos ofrecen mayor documentación. Y es una buena práctica también documentar de manera clara nuestras propias imágenes, en caso de querer compartirlas en Docker Hub.

Siguiendo con el ejemplo anterior podemos ver otro detalle a corregir.

La etiqueta latest no se recomienda usar porque el día de mañana puede no estar refiriéndose a la misma versión de una imagen. 

Siempre conviene especificar con qué versión estamos trabajando en un momento dado así todos tenemos el mismo resultado final. En este ejemplo lo modificaremos a la versión 20.04.

dockerfile

Directorios y dockerignore.

Otra buena práctica es siempre trabajar sobre un directorio vacío de ser posible, solo con el Dockerfile y los archivos mínimos necesarios para la imagen. De tener archivos que no queremos se incluyan al ejecutar el build podemos agregar un archivo .dockerignore. Esto nos va a permitir especificar que queremos que se excluya de la creación de la imagen. 

Paquetes y multilínea.

Algo muy útil cuando trabajamos con instalación de paquetes es utilizar el parámetro –no-install-recommends para no instalar los paquetes recomendados y minimizar el peso final de nuestra imagen. 

Además siempre conviene trabajar multilínea para mejorar la legibilidad del Dockerfile a quien necesite leerlo o modificarlo rápidamente. 

dockerfile

¿Y ahora qué?

Si te gusto Docker y quieres aprenderlo como corresponde y desde cero, en Abatic ya lanzamos los primeros dos laboratorios 100% prácticos de nuestro Ciclo de Laboratorios Practicos de Docker en Ubuntu, el cual coronamos con nuestro certificado correspondiente.

Con material didáctico en video y pdf, en ellos encontrarás todo lo necesario para moverte cómodamente y agregar una skill fundamental y fundacional a tu repertorio. 

Además el próximo Lunes 24 de Agosto lanzamos el tercer laboratorio dedicado específicamente a Dockerfile y la creación de imágenes

Esperamos verte pronto.

Acerca de Emilio Pérez

Programando desde los 9 años y trabajando desde los 19 con Delphi.
Oracle y PostgreSQL DBA y Developer.
Especializado en formar y enseñar a programar.
CEO de Abatic y Cudacu

Reader Interactions

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Responsable: ABATIC SOLUCIONES TECNOLOGICAS SLU
Finalidad: gestionar los comentarios.
Legitimación: tu consentimiento.
Destinatarios: los datos que me facilitas estarán ubicados en los servidores de Nicalia dentro de la UE. Ver política de privacidad de Nicalia.
Derechos: podrás ejercer tus derechos, entre otros, a acceder, rectificar, limitar, suprimir, portabilidad y olvido de tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.