Docker es una plataforma de desarrollo software de código abierto que permite virtualizar a nivel de sistema operativo aplicaciones, empaquetándolas en containers.  Se denomina containerization al encapsulado en un paquete compuesto por un entorno runtime completo: la aplicación, más todas sus dependencias, bibliotecas y otros archivos binarios, así como los archivos de configuración necesarios para ejecutarse.

Los containers son una solución al problema de cómo hacer que el software se ejecute de manera fiable cuando se traslada de un entorno informático a otro, como es el caso de una máquina física a una virtual en el cloud.

Docker se puede ejecutar virtualmente en cualquier sistema ya sea Linux, Mac o Windows.

De entre las ventajas de esta plataforma de desarrollo software destaca la popularidad del formato de las imágenes generadas con Docker al permitir una gran portabilidad. A su vez, nos aportan modularidad, es decir podemos dividir una aplicación en módulos llamados microservicios; por esta razón, las aplicaciones son más fáciles de gestionar gracias a la posibilidad de realizar cambios sin afectar a los demás módulos.

Los containers nos permiten aplicar la cultura de programación DevOps y sobretodo aportan repetitividad, es decir, se pueden replicar permitiendo la escalabilidad de las aplicaciones.

Kubernetes es un sistema de código abierto que permite automatizar la implementación, el escalado y la administración de aplicaciones en containers.

La experiencia y las buenas prácticas aportadas por el equipo de proyectos de Ackstorm en la configuración y creación de contenedores mediante Docker, ayudan en entornos productivos a mejorar su gestiónseguridad y portabilidad:

  • Multi-stages builds: nos permite encadenar containers dentro de un mismo dockerfile de manera secuencial; de este modo la salida de uno puede ser utilizada en la creación del siguiente reduciendo tamaño en la imagen final.
  • No confiar en imágenes base desconocidas: utilizar repositorios oficiales, ya que pueden contener malware, backdoors, versiones antiguas, etc. Recomendamos hacer uso de imágenes base pequeñas como alpine.
  • Utilizar non-root user dentro los containers: definir un grupo y un usuario para que el container no se ejecute como root.
  • Utilizar Security Analysis Tools: herramientas que analizan Dockers a nivel de seguridad como Clair, Gerrit o Docker Bench.
  • Utilizar containers sidecar: es un container que complementa al container principal. Ya puede ser a modo de tareas como el caso de un proxy, o también en la compartición de un sistema de ficheros.
  • Sistema de archivos de sólo lectura: lo ideal es que no se escriba en los containers, aunque no siempre es posible.