Docker: Primeros Pasos

Por Ariel Altamirano 30 de junio de 2022
DockerDevOps
Docker: Primeros Pasos

Docker fue presentado en marzo de 2013 por Solomon Hykes en PyCon como una herramienta para desarrolladores, la cual permite empaquetar e implementar fácilmente aplicaciones dentro de un contenedor.

Hykes describió a los contenedores como: unidades autónomas de software que se pueden entregar y desplegar en cualquier servidor ya que están aislados a nivel de proceso y tienen su propio sistema de archivos, por ende, no son dependientes de librerías o dependencias externas para ejecutarse.

¿Cómo funciona Docker?

Los contenedores se han presentado como una alternativa a la virtualización que usan las máquinas virtuales (VM) debido a los múltiples beneficios que brincan los contenedores, entre ellos está que los contenedores son mucho más livianos que las VMs. Docker es la opción más común para implementar contenedores, sin embargo, existen más opciones como Podman, LXD, entre otros.

En la figura 1, podemos ver que cada máquina virtual tiene su propio Sistema Operativo (SO) invitado por encima del Host, a diferencia de los contenedores que comparten el SO del anfitrión (Host) y es por eso que son más livianos.

Funcionamiento de Docker y VMs
Figura 1. Funcionamiento de Docker y VMs

El hecho de que los contenedores no usen un SO completo ayuda a que sean más livianos, es decir, reduce de gran manera la carga que soporta la máquina anfitriona, además, el espacio de almacenamiento es menor ya que solamente utiliza lo mínimo para funcionar, y el tiempo que necesita para lanzar una aplicación es considerablemente menor a las máquinas virtuales.

Diferencias entre Contenedores y VMs

Las máquinas virtuales nos permiten crear entornos con sistemas operativos totalmente aislados del sistema operativo host, obteniendo así un control total sobre el sistema operativo invitado, de esta manera se puede mezclar diferentes sistemas operativos entre el host y los invitados.

Por otro lado, los contenedores además de permitirnos desplegar aplicaciones de manera más rápida también ayudan a crear entornos de desarrollo replicables entre los diferentes miembros de un equipo de desarrollo y así asegurar que se ejecutará de la misma manera en todos los equipos, independientemente del sistema operativo cada integrante del equipo tendrá el ambiente funcional.

Docker cada vez es más indispensable entre los desarrolladores.

A continuación, en la tabla 1 se presentan las diferencias entre contenedores y VMs:

CaracterísticaContenedoresMáquinas Virtuales
DespliegueEn segundosEn minutos
TamañoLigeros (KB – MB)Pesadas (MB – GB)
Sistema OperativoCompartidoIndependiente
Uso de recursosMenorMayor
Tiempo de creaciónSegundosMinutos
ReplicabilidadFácilModerada
ParametrizaciónLímites configurablesPre-aprovisionado

Arquitectura de Docker

Docker utiliza la arquitectura cliente servidor, en donde, el cliente de Docker tiene el trabajo de comunicarse con el demonio de Docker para que pueda crear, ejecutar o distribuir los contenedores.

Este demonio de Docker puede ser tanto local como puede ser remoto ya que el cliente y el demonio de Docker se comunican mediante una API REST.

Arquitectura de Docker
Figura 2. Arquitectura de Docker

En la figura 2 se puede observar 3 grandes divisiones:

Client

Se encarga de crear un puente de comunicación para que el usuario pueda interactuar con el demonio de Docker mediante diferentes comandos como: docker run.

Docker Host

Dentro de esta división se encuentra los contenedores creados por el usuario (apagados o encendidos), también las imágenes descargadas que se pueden utilizar para crear contenedores, y, finalmente el demonio Docker que escucha las peticiones de la API REST y el cual administra tanto contenedores, imágenes, redes y volúmenes. El demonio de Docker también se puede comunicar con más demonios para administrar los servicios de Docker.

Registry

Los registros de Docker almacenan imágenes de Docker, Docker Hub es un repositorio público y es el repositorio predeterminado de Docker para buscar imágenes y descargarlas mediante comandos como docker pull.

Por qué usar contenedores

Docker brinda un solo objeto para poder ejecutar con total confianza en cualquier equipo, además de que su sintaxis simple brinda el control absoluto de la implementación y por ende la fácil identificación de problemas ya que se maneja por fases.

Entre los muchos beneficios que ofrece Docker, para los desarrolladores se ha vuelto primordial ya que:

  • Entrega de software aislado con rapidez: Los contenedores permiten desplegar aplicaciones de manera rápida y confiable.
  • Estandarización de operaciones para mayor control de implementación y despliegue: Docker normaliza cómo se despliegan las aplicaciones.
  • Manejo de código entre diferentes equipos ya sea locales o remotos: Facilita la colaboración entre equipos distribuidos.

Cuándo usarlos

Docker facilita la creación y distribución de microservicios por lo que es usado en aplicaciones con arquitectura de microservicios distribuidos, que mediante CI/CD se puede automatizar el despliegue de los mismos y estandarizando los procesos y entornos. Al ser los contenedores independientes y de fácil distribución, también son muy usados para preparar e instalar un entorno de algún servicio para usuarios sin conocimientos técnicos.

Conclusiones

  • Facilitan preparar un nuevo ambiente de trabajo independientemente de la máquina anfitriona.
  • Permiten arrancar aplicaciones rápidamente aprovechando los recursos de hardware.
  • Se puede mantener un control de versiones para la infraestructura ya que docker se gestiona mediante archivos de texto plano.

Referencias

Volver al blog

Cuéntanos qué quieres lograr

Te ayudamos a encontrar la mejor solución para tu negocio.

Hablar con un asesor