Docker

¿Qué es Docker?

Docker es una plataforma abierta para desarrollar, transportar y ejecutar aplicaciones. Docker permite separar aplicaciones de su infraestructura para que pueda entregar software rápidamente. Con Docker, puede administrar su infraestructura de la misma manera que administra sus aplicaciones. Al aprovechar las metodologías de Docker para transportar, probar e implementar código rápidamente, puede reducir significativamente la demora entre la escritura del código y su ejecución en producción.

Plataforma Docker

Docker brinda la capacidad de empaquetar y ejecutar una aplicación en un entorno aislado llamado contenedor. El aislamiento y la seguridad le permiten ejecutar muchos contenedores simultáneamente en un host determinado. Los contenedores son livianos y contienen todo lo necesario para ejecutar la aplicación, por lo que no necesita depender de lo que está instalado actualmente en el host. Puede compartir contenedores fácilmente mientras trabaja y asegurarse de que todas las personas con las que comparte obtienen el mismo contenedor que funciona de la misma manera.

 

Algunos beneficios proporcionados por Docker y su plataforma para administrar el ciclo de vida de sus contenedores:

  • Desarrolle su aplicación y sus componentes de soporte utilizando contenedores. 
  • El contenedor se convierte en la unidad para distribuir y probar su aplicación.
  • Cuando esté listo, implemente su aplicación en su entorno de producción, como un contenedor o un servicio orquestado. Esto funciona igual si su entorno de producción es un centro de datos local, un proveedor de nube o un híbrido de los dos.

¿Para qué puedo usar Docker?

Docker agiliza el ciclo de vida del desarrollo al permitir que los desarrolladores trabajen en entornos estandarizados utilizando contenedores locales que brindan sus aplicaciones y servicios. Los contenedores son ideales para flujos de trabajo de integración continua y entrega continua (CI / CD).

Consideremos el siguiente escenario:

  • Sus desarrolladores escriben código localmente y comparten su trabajo con sus colegas usando contenedores Docker. 
  • Usan Docker para impulsar sus aplicaciones a un entorno de prueba y ejecutar pruebas automáticas y manuales. 
  • Cuando los desarrolladores encuentran errores, pueden corregirlos en el entorno de desarrollo y volver a implementarlos en el entorno de prueba para realizar pruebas y validaciones. 
  • Una vez finalizada la prueba, hacer llegar la solución al cliente es tan simple como enviar la imagen actualizada al entorno de producción.

Implementación y escalado receptivos

La plataforma basada en contenedores de Docker permite cargas de trabajo altamente portátiles. Los contenedores Docker pueden ejecutarse en una computadora portátil local de un desarrollador, en máquinas físicas o virtuales en un centro de datos, en proveedores de nube o en una combinación de entornos.

La portabilidad y la ligereza de Docker también facilitan la administración dinámica de cargas de trabajo, ampliando o eliminando aplicaciones y servicios según lo dicten las necesidades comerciales, casi en tiempo real.

Ejecutar más cargas de trabajo en el mismo hardware

Docker es ligero y rápido. Proporciona una alternativa viable y rentable a las máquinas virtuales basadas en hipervisores, por lo que puede utilizar una mayor parte de su capacidad informática para lograr sus objetivos comerciales. Docker es perfecto para entornos de alta densidad y para implementaciones pequeñas y medianas donde necesita hacer más con menos recursos.

Arquitectura de Docker

Docker utiliza una arquitectura cliente-servidor. El cliente de Docker habla con el deamon de Docker, que hace el trabajo pesado de construir, ejecutar y distribuir sus contenedores Docker. El cliente y el deamon de Docker pueden ejecutarse en el mismo sistema, o puede conectar un cliente de Docker a un deamon de Docker remoto. El cliente y el deamon de Docker se comunican mediante una API REST, a través de sockets UNIX o una interfaz de red. Otro cliente de Docker es Docker Compose, que le permite trabajar con aplicaciones que constan de un conjunto de contenedores.

Docker deamon

El deamon de Docker (dockerd) escucha las solicitudes de la API de Docker y administra objetos de Docker como imágenes, contenedores, redes y volúmenes. Un demonio también puede comunicarse con otros demonios para administrar los servicios de Docker.

Docker client

El cliente de Docker (Docker) es la forma principal en que muchos usuarios de Docker interactúan con Docker. Cuando utiliza comandos como docker run, el cliente envía estos comandos a dockerd, que los ejecuta. El comando de Docker usa la API de Docker. El cliente de Docker puede comunicarse con más de un deamon.

Docker registries

Un registro de Docker almacena imágenes de Docker. Docker Hub es un registro público que cualquiera puede usar y Docker está configurado para buscar imágenes en Docker Hub de forma predeterminada. Incluso puede ejecutar su propio registro privado.

Cuando usa los comandos docker pull o docker run, las imágenes requeridas se extraen de su registro configurado. Cuando usa el comando docker push, su imagen se envía a su registro configurado.

¿Qué objetos podemos encontrar en un ambiente Docker?

Cuando usa Docker, está creando y usando imágenes, contenedores, redes, volúmenes, complementos y otros objetos. Esta sección es una breve descripción general de algunos de esos objetos.

Images

Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor Docker. A menudo, una imagen se basa en otra imagen, con alguna personalización adicional. Por ejemplo, puede crear una imagen basada en la imagen de ubuntu, pero instala el servidor web Apache y su aplicación, así como los detalles de configuración necesarios para ejecutar su aplicación.

Puede crear sus propias imágenes o puede usar solo las creadas por otros y publicadas en un registro. Para construir su propia imagen, cree un Dockerfile con una sintaxis simple para definir los pasos necesarios para crear la imagen y ejecutarla. Cada instrucción en un Dockerfile crea una capa en la imagen. Cuando cambia el Dockerfile y reconstruye la imagen, solo se reconstruyen las capas que han cambiado. Esto es parte de lo que hace que las imágenes sean tan ligeras, pequeñas y rápidas en comparación con otras tecnologías de virtualización.

Contenedores

Un contenedor es una instancia ejecutable de una imagen. Puede crear, iniciar, detener, mover o eliminar un contenedor mediante la API o la CLI de Docker. Puede conectar un contenedor a una o más redes, adjuntarle almacenamiento o incluso crear una nueva imagen basada en su estado actual.

De forma predeterminada, un contenedor está relativamente bien aislado de otros contenedores y de su máquina host. Puede controlar qué tan aislados están la red, el almacenamiento u otros subsistemas subyacentes de un contenedor de otros contenedores o de la máquina host.

Un contenedor se define por su imagen, así como por las opciones de configuración que le proporcione al crearlo o iniciarlo. Cuando se quita un contenedor, cualquier cambio en su estado que no esté almacenado en el almacenamiento persistente desaparece.

Docker vs Kubernetes

Si bien es común comparar Kubernetes con Docker, una comparación más adecuada es Kubernetes frente a Docker Swarm. Docker Swarm es la tecnología de orquestación de Docker que se centra en la agrupación en clústeres para contenedores de Docker, estrechamente integrada en el ecosistema de Docker y utilizando su propia API.

Una diferencia fundamental entre Kubernetes y Docker es que Kubernetes está diseñado para ejecutarse en un clúster, mientras que Docker se ejecuta en un solo nodo. Kubernetes es más extenso que Docker Swarm y está destinado a coordinar grupos de nodos a escala en producción de manera eficiente. Los pods de Kubernetes (unidades de programación que pueden contener uno o más contenedores en el ecosistema de Kubernetes) se distribuyen entre los nodos para proporcionar alta disponibilidad.

Translate »