Buenas prácticas en Docker
Tags: docker, devops, espanol
Published: 2019-08-30 22:34:23

<h2>Como mantener sus images pequeñas</h2>

Las imágenes pequeñas son más rápidas de extraer de la red y más rápidas de cargar en la memoria al iniciar contenedores o servicios. Existen algunas reglas generales para mantener pequeño el tamaño de la imagen:

- Comience con una imagen base adecuada. Por ejemplo, si necesita un JDK, considere basar su imagen en la imagen oficial de openjdk, en lugar de comenzar con una imagen genérica de ubuntu e instalar openjdk como parte 
 del Dockerfile.

- Utiliza multistage builds. Por ejemplo, puede usar la imagen de Maven para construir su aplicación Java, luego restablecer la imagen de Tomcat y copiar los artefactos Java en la ubicación correcta para implementar su aplicación, todo en el mismo Dockerfile. Esto significa que su imagen final no incluye todas las bibliotecas y dependencias extraídas por la compilación, sino solo los artefactos y el entorno necesarios para ejecutarlos.

- Si tiene varias imágenes con mucho en común, considere crear su propia imagen base con los componentes compartidos y basar sus imágenes únicas en eso. Docker solo necesita cargar las capas comunes una vez, y se almacenan en caché. Esto significa que sus imágenes derivadas usan la memoria en el host Docker de manera más eficiente y se cargan más rápidamente.


- Cuando construya imágenes, márquelas siempre con etiquetas útiles que codifiquen la información de la versión, el destino previsto (prod o test, por ejemplo), la estabilidad u otra información que sea útil al implementar la aplicación en diferentes entornos. No confíe en la última etiqueta creada automáticamente.

<h2>Cuando y como persistir application data </h2>

- Evite almacenar datos de aplicaciones en la capa de escritura de su contenedor utilizando controladores de almacenamiento. Esto aumenta el tamaño de su contenedor y es menos eficiente desde una perspectiva de I/O que el uso de volúmenes o montajes de enlace.

- En su lugar, almacene datos utilizando volúmenes.

- Un caso en el que es apropiado usar montajes de enlace es durante el desarrollo, cuando es posible que desee montar su directorio de origen o un binario que acaba de construir en su contenedor. Para la producción, use un volumen en su lugar, móntelo en la misma ubicación que montó un montaje de unión durante el desarrollo.

- Para producción, use `secrets` para almacenar datos confidenciales de aplicaciones utilizados por los servicios y use configuraciones para datos no confidenciales, como archivos de configuración. 

<h2>Diferencias en el ambiente de desarrollo y producción</h2>

| Desarrollo                                                                	| Producción                                                                                                                                              	|
|---------------------------------------------------------------------------	|---------------------------------------------------------------------------------------------------------------------------------------------------------	|
| Use los bind mounts para dar acceso a su contenedor   a su código fuente. 	| Use volúmenes para almacenar datos del contenedor.                                                                                                      	|
| Use Docker Desktop para Mac ó Docker Desktop para Windows.                	| Utilice Docker Engine - Enterprise si es posible, con mapeo de  usuarios para un mayor aislamiento de los procesos de  Docker de los procesos del host. 	|
|                                                                           	|                                                                                                                                                         	|                                                                                                                                                        

Gracias por su atención, estamos haciendo un gran esfuerzo para que la comunidad hispano-parlante también pueda colaborar con contenidos. Los invito a seguirme en twitter y también en comunidades como GDG Pura vida donde regularmente se hacen eventos gratuitos para la comunidad.