Docker es un proyecto de código abierto para automatizar la implementación de aplicaciones como contenedores portátiles y autosuficientes que se pueden ejecutar en la nube o localmente. Docker es también una empresa que promueve e impulsa esta tecnología, en colaboración con proveedores de la nube, Linux y Windows.
Google, Microsoft, Amazon, Oracle, WMware, IBM, RedHat están apostando fuertemente por estas tecnologías, ofreciendo todo tipo de servicios a los desarrolladores en la nube. Hoy por hoy todo va encaminado a ser dockerizado
En los siguientes parrafos trataremos de definir ¿qué es un Docker? con un ejemplo practico:
Para que podamos acceder como un usuario cualquiera a una aplicación de software, dependiendo del tipo de aplicación, nuestro servidor o equipo de computo donde se encuentra el software también necesita tener instaladas una serie de cosas para que la aplicación se ejecute correctamente: cierta versión de Java instalado, un servidor de aplicaciones (tomcat, la versión especifica de una base de datos o un servidor web).
Docker, me permite meter en un contenedor todas aquellas cosas que mi aplicación necesita para ser ejecutada (Java, Tomcat, Apache…) y la propia aplicación. El objetivo es que este contenedor pueda ser exportado a cualquier servidor, maquina virtual y/o computador que tenga instalado Docker y ejecutar la aplicación sin tener que hacer nada más, ni preocuparme de qué versiones de software tiene instalado el nuevo servidor.
Los contenedores de Docker se pueden ejecutar en cualquier lugar, en un proveedor de servicios externo o en la nube, (Azure, Amazon Web Services, Google Cloud). Los contenedores de imagen de Docker se pueden ejecutar de forma nativa en Linux y Windows. Sin embargo, las imágenes de Windows solo pueden ejecutarse en hosts de Windows y las imágenes de Linux pueden ejecutarse en hosts de Linux y hosts de Windows (con una máquina virtual Linux de Hyper-V, hasta el momento), donde host significa un servidor o una máquina virtual.
¿Qué es un contenedor?
La empresa RedHat Linux nos da una definición muy precisa y clara: «Un contenedor de Linux® es un conjunto de uno o más procesos que se encuentran aislados del resto del sistema. Todos los archivos que se necesitan para ejecutarlos provienen de una imagen diferente, lo cual significa que los contenedores de Linux son móviles y homogéneos a medida que pasan de la etapa de desarrollo a la de prueba y, finalmente, a la de producción. La comunidad open source Docker trabaja para mejorar estas tecnologías a fin de beneficiar a todos los usuarios de forma gratuita.»
La empresa, Docker Inc., desarrolla el trabajo de la comunidad Docker, lo hace más seguro y comparte estos avances con el resto de la comunidad. También respalda las tecnologías mejoradas y reforzadas para los clientes empresariales.
¿Qué beneficios tiene un docker?
- Solo se tiene que programar la aplicación una sola vez. Dado que una app en Docker se ejecuta dentro de un contenedor, y el contenedor se puede ejecutar en cualquier sistema operativo que tenga Docker instalado, no se tiene que programar y configurar el software para diferentes tipos de plataformas hardware o sistemas operativos en los que tiene que poder ejecutarse. Solo tienes que programarlo una sola vez para Docker.
- Se obtiene una mayor consistencia entre los entornos de prueba y los entornos de producción. Cuando se desarrolla con Docker, se hacen pruebas de la app dentro de un contenedor, y la despliegas dentro de un contenedor. Eso significa que el entorno de pruebas es idéntico al entorno en el que se va a ejecutar el software. En consecuencia, los desarrolladores ganan en tranquilidad y en confianza pues saben que los usuarios finales no se van a topar con problemas que el equipo que probó el software hubiera pasado por alto.
- Se obtiene mayor modularidad. El desarrollo con contenedores es ideal para un enfoque basado en microservicios para el diseño de aplicaciones. Bajo este modelo, las aplicaciones complejas se dividen en unidades más discretas y pequeñas. Por ejemplo, y sin llegar a cambiar la arquitectura tradicional de la app, la base de datos quizás se ejecute en un contenedor mientras que el front-end de la misma se ejecuta en otro distinto. Este enfoque hace que la aplicación sea modular, reduciendo la complejidad de tener que mantener y actualizar la aplicación, dado que un error o un cambio relacionado con una parte de la app no requiere que se revise la aplicación completa.
- Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como administradores de sistemas, en relación a las máquinas, a los entornos en sí donde se ejecutan las aplicaciones software, los procesos de despliegue, etc.
- En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse en desarrollar su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.
¿Y qué diferencia a Docker respecto a una máquina virtual?
Realmente el concepto es algo similar, pero un contenedor no es lo mismo que una máquina virtual. Un contenedor es más ligero, mientras que a una máquina virtual necesitas instalarle un sistema operativo para funcionar, un contenedor de Docker funciona utilizando el sistema operativo que tiene la máquina en la que se ejecuta el contenedor.
Herramientas y términos de Docker
Algunas de las herramientas y la terminología que encontrará al utilizar Docker incluyen:
DockerFile
Cada contenedor Docker se inicia con un archivo de texto simple que contiene instrucciones para crear la imagen del contenedor Docker. DockerFile automatiza el proceso de creación de imágenes Docker. Es esencialmente una lista de instrucciones de interfaz de línea de comandos (CLI) que Docker Engine ejecutará para ensamblar la imagen.
Imágenes Docker
Las imágenes Docker contienen código de origen de aplicación ejecutable, así como todas las herramientas, bibliotecas y dependencias que el código de aplicación debe ejecutar como contenedor. Cuando ejecuta la imagen de Docker, se convierte en una instancia (o varias instancias) del contenedor.
Es posible crear una imagen de Docker desde cero, pero la mayoría de los desarrolladores los sacan de los repositorios comunes. Se pueden crear varias imágenes Docker a partir de una única imagen base, y compartirán los puntos en común de su lote.
Las imágenes Docker se componen de capas, y cada capa corresponde a una versión de la imagen. Cuando un desarrollador realiza cambios en la imagen, se crea una nueva capa superior, y esta capa superior sustituye a la capa superior anterior como la versión actual de la imagen. Las capas anteriores se guardan para las retrotracciones o se vuelven a utilizar en otros proyectos.
Cada vez que se crea un contenedor a partir de una imagen de Docker, se crea otra nueva capa denominada capa de contenedor. Los cambios realizados en el contenedor, como la adición o supresión de archivos, sólo se guardan en la capa de contenedor y sólo existen mientras se ejecuta el contenedor. Este proceso iterativo de creación de imágenes permite aumentar la eficiencia general ya que varias instancias de contenedores en vivo pueden ejecutarse desde una única imagen base, y cuando lo hacen, aprovechan un lote común.
Contenedores Docker
Los contenedores Docker son las instancias activas en ejecución de imágenes Docker. Mientras que las imágenes Docker son archivos de sólo lectura, los contenedores son contenido en vivo, efímero y ejecutable. Los usuarios pueden interactuar con ellos, y los administradores pueden ajustar sus valores y condiciones utilizando comandos Docker.
Docker Hub
Docker Hub es el repositorio público de imágenes Docker que se denomina a sí mismo la «biblioteca y comunidad más grande del mundo para imágenes de contenedor». Contiene más de 100,000 imágenes de contenedor procedentes de proveedores de software comerciales, proyectos de código abierto y desarrolladores individuales. Incluye imágenes que han sido producidas por Docker, Inc., imágenes certificadas pertenecientes a Docker Trusted Registry, y muchas otros miles de imágenes.
Todos los usuarios de Docker Hub pueden compartir sus imágenes a voluntad. También pueden descargar imágenes base predefinidas del sistema de archivos Docker para utilizarlas como punto de partida para cualquier proyecto de contenerización.
Daemon Docker
El daemon Docker es un servicio que se ejecuta en el sistema operativo, como Microsoft Windows o Apple MacOS o iOS. Este servicio crea y gestiona las imágenes Docker utilizando los comandos del cliente, actuando como el centro de control de la implementación de Docker.
Registro Docker
Un registro Docker es un sistema de almacenamiento y distribución de código abierto escalable para imágenes Docker. El registro le permite realizar un seguimiento de las versiones de imagen en los repositorios, utilizando el etiquetado para la identificación. Esto se logra utilizando git, una herramienta de control de versiones.
Si deseas aprender como instalar Dockers puedes consultar nuestro Curso Introducción a Dockers y Kubernetes
Fuente:
https://aprendelinux.com/docker-kubernetes/
https://docs.microsoft.com/es-es/dotnet/architecture/microservices/container-docker-introduction/docker-defined
https://www.ibm.com/cl-es/cloud/learn/docker
https://aws.amazon.com/es/docker/#