El desarrollo de aplicaciones suele implicar la gestión de complejas bases de datos, lenguajes de programación, marcos de trabajo, dependencias, etc. Además, puedes encontrarte con problemas de compatibilidad al trabajar con diferentes sistemas operativos (SO). Cada una de estas variables puede afectar negativamente a tu flujo de trabajo.
Para resolver estos problemas, puedes empezar a utilizar Docker. Esta herramienta te permite construir y gestionar aplicaciones en entornos de contenedores. En definitiva, Docker puede eliminar muchas tareas de configuración complicadas y hacer que el desarrollo sea más fácil y eficiente.
En este post, responderemos a la pregunta «¿qué es Docker?» y explicaremos cómo funciona. Luego, te mostraremos algunos de sus principales casos de uso y cómo empezar como principiante. ¡Vamos a sumergirnos!
¿Qué es Docker?
¿Qué es exactamente Docker? Es una plataforma de código abierto para desarrollar aplicaciones en un sandbox. Sus entornos virtuales ligeros se conocen como contenedores:
Aunque los contenedores existen desde 1979, Docker los ha hecho más accesibles. Con Docker, los desarrolladores pueden construir, probar y desplegar sus aplicaciones localmente o en un servidor de producción.
Desde el lanzamiento de Docker 1.0 en 2014, ha estandarizado el uso de contenedores tanto para desarrolladores individuales como para empresas. Ahora tiene más de 13 millones de usuarios, entre los que se encuentran grandes empresas como Netflix, Target y Adobe:
Además, la adopción de Docker aumenta cada año. Según Datadog, casi el 25% de las empresas han empezado a utilizar Docker para monitorizar sus aplicaciones. Desde 2015, este porcentaje ha crecido entre 3 y 5 puntos porcentuales cada año:
Como podemos ver, Docker se ha convertido en una plataforma muy popular para desarrollar y desplegar aplicaciones. Para entender mejor su popularidad, vamos a sumergirnos en cómo funciona el software Docker.
Docker Frente a las Máquinas Virtuales
En Docker, puedes empaquetar una aplicación en una unidad estandarizada, que puede utilizarse para el desarrollo de software. Esta unidad, o contenedor, incluye la codificación y las dependencias de la aplicación para que pueda ejecutarse fácilmente en cualquier entorno informático.
Antes de Docker, las empresas solían utilizar máquinas virtuales (VM) para ejecutar aplicaciones. Éstas pueden emular ordenadores físicos, permitiendo a los desarrolladores convertir un servidor en varios. Sin embargo, este enfoque puede tener algunas desventajas.
Cada máquina virtual contiene una copia completa del sistema operativo y de la aplicación, así como los binarios y bibliotecas necesarios. Estos archivos pueden ocupar decenas de GB en un ordenador. Además, la virtualización del hardware para un SO invitado puede requerir una sobrecarga considerable.
En lugar de virtualizar el hardware, los contenedores virtualizan el SO. En Docker, los contenedores son abstracciones en la capa de aplicaciones que pueden contener tanto código como dependencias. En la misma máquina, varios contenedores pueden ejecutarse como procesos aislados:
Como resultado, los contenedores Docker suelen ocupar menos espacio. También pueden contener más aplicaciones sin necesidad de tantas máquinas virtuales y sistemas operativos.
¿Cómo Funciona Docker?
Imagina que intentas enviar una carga de un lugar a otro. En la era moderna, puedes hacerlo fácilmente con contenedores. Éstos mantendrán ciertos artículos juntos en un entorno sellado, lo que permitirá transportarlos en barcos, trenes o aviones.
Docker funciona de forma muy similar. En pocas palabras, Docker estandarizó el método de desarrollo y despliegue de software.
Docker funciona con contenedores. Éstos pueden tener componentes reutilizables como Python, Node, dependencias y otros. Entonces, puedes desplegar los contenedores en cualquier lugar sin preocuparte de los problemas de compatibilidad.
Docker puede ser complicado al principio, así que vamos a discutir todos los componentes principales de este software. Una vez que entiendas estas características clave, ¡podrás agilizar el desarrollo de tus aplicaciones!
Docker Engin
Docker Engine es la tecnología cliente-servidor para construir y contenerizar aplicaciones en Docker. Esencialmente, soporta todas las tareas relacionadas con la ejecución de tu aplicación basada en contenedores:
Estos son los principales componentes del motor Docker:
- Docker Daemon: Gestiona las imágenes Docker, los contenedores, las redes y los volúmenes. También escucha las peticiones de la API de Docker y las procesa.
- API REST del motor Docker: Una API desarrollada por Docker que interactúa con el demonio.
- Docker CLI: La interfaz de línea de comandos para comunicarse con el demonio Docker.
Con Docker Engine, puedes ejecutar aplicaciones en contenedores en cualquier infraestructura. Esta configuración contribuye al tiempo de ejecución de contenedores de Docker, líder en la industria.
Imagen Docker
Una imagen Docker es un paquete ejecutable de software que incluye todo el código fuente, las dependencias y las herramientas necesarias para ejecutar una aplicación. Las imágenes son plantillas de sólo lectura que proporcionan instrucciones para crear un contenedor.
Puedes entender mejor las imágenes Docker pensando en ellas como planos. Contienen instantáneas de lo que incluirá un contenedor cuando se ejecute.
En una imagen, hay varias capas apiladas. Si quieres construir una imagen de servidor web, por ejemplo, puedes incluir primero Ubuntu Linux. A continuación, puedes poner en capas la codificación de Apache y PHP.
Al hacer una imagen Docker, es mejor colocar las capas más variables en la pila. Así, si necesitas hacer un cambio, no tendrás que reconstruir toda la imagen.
Contenedor Docker
Como hemos comentado antes, los contenedores son partes vitales de Docker. En pocas palabras, un contenedor Docker es una zona aislada para que una aplicación se ejecute sin afectar al resto del sistema. Esta unidad de software empaquetará todo el código y las dependencias para que pueda transferirse fácilmente de una aplicación a otra.
Estas son algunas de las ventajas de utilizar contenedores Docker:
- Estándar: Aunque los contenedores existen desde hace décadas, Docker ha creado el estándar de la industria para su uso. Los contenedores Docker son increíblemente portátiles y fáciles de usar.
- Ligeros: Como los contenedores comparten el núcleo del sistema operativo, no necesitas un sistema operativo diferente para cada aplicación. Como resultado, tu aplicación puede ejecutarse de forma más eficiente y reducir los costes de los servidores y las licencias.
- Seguro: A diferencia de las máquinas virtuales, los contenedores aíslan las aplicaciones, lo que los hace más seguros. Con Docker, tus contenedores tendrán capacidades de aislamiento por defecto.
En definitiva, los contenedores Docker ofrecen más ventajas que las máquinas virtuales. Aunque aíslan y asignan recursos de forma similar, los contenedores suelen ser más portátiles, eficientes y seguros.
Docker Compose
Docker Compose es una herramienta diseñada para ejecutar varios contenedores como un único servicio. Si tu aplicación requiere tanto NGINX como MySQL, Docker Compose te permite crear un archivo que inicie ambos contenedores. Esto evita la necesidad de iniciar cada uno por separado.
Estos son los tres pasos básicos para utilizar Docker Compose:
- Crea un Dockerfile para definir el entorno de la aplicación y poder reproducirlo.
- Define cada uno de los servicios de tu aplicación en un archivo docker-compose.yml para que puedan ejecutarse en un entorno aislado.
- Utiliza el comando Docker Compose para iniciar y ejecutar tu aplicación.
Básicamente, Docker Compose permite que varios contenedores se ejecuten de forma aislada. Sin embargo, pueden interactuar entre sí cuando sea necesario.
Por ejemplo, Compose puede ayudarte a crear y configurar las dependencias de servicios de tu aplicación, como bases de datos, cachés o API de servicios web.
Dockerfile
Un Dockerfile es un documento de texto que incluye instrucciones para construir imágenes Docker. Al leer este archivo, Docker construirá automáticamente nuevas imágenes.
El comando docker build
creará una imagen a partir de un Dockerfile y un contexto. Este contexto es un conjunto de archivos que se encuentra en una ruta o URL especificada.
En primer lugar, introduce el siguiente comando:
docker build
Esto enviará todo el contexto al demonio Docker. Para apuntar a un archivo Docker en tu sistema de archivos, utiliza este comando:
docker build -f /path/to/a/Dockerfile
Si la construcción tiene éxito, puedes especificar un repositorio y una etiqueta donde quieras guardar la nueva imagen:
docker build -t shykes/myapp
A continuación, el demonio Docker realizará una validación del Dockerfile. Si hay algún problema de sintaxis, devolverá un error.
Docker Desktop
Para empezar a utilizar Docker en tu entorno Mac, Linux o Windows, puedes instalar Docker Desktop. Ofrece una interfaz sencilla y fácil de usar para gestionar contenedores, aplicaciones e imágenes en tu ordenador personal:
Con Docker Desktop, no tendrás que utilizar la línea de comandos para realizar tareas esenciales. Esto puede acelerar el flujo de trabajo de desarrollo:
También viene con un Mercado de Extensiones incorporado que facilita el comienzo del uso de herramientas de desarrolladores de terceros. Estas incluyen software para depurar, probar y asegurar tus aplicaciones:
Además, Docker Desktop es gratuito para uso personal y de pequeñas empresas. Sin embargo, ten en cuenta que las empresas más grandes tendrán que adquirir una suscripción, a partir de 5 dólares al mes.
Docker Hub
Docker Hub es una plataforma donde puedes encontrar y compartir imágenes de contenedores. Es el mayor repositorio de imágenes de contenedores del mundo, con recursos de desarrolladores de la comunidad, proyectos de código abierto y proveedores de software independientes (ISV):
Estas son algunas de las características incluidas en el Docker Hub:
- Repositorios para enviar y recibir imágenes de contenedores
- Crea equipos y organizaciones con acceso a repositorios privados
- Imágenes oficiales de Docker
- Imágenes Docker Verified Publisher
- Crea imágenes de contenedores desde GitHub o Bitbucket y envíalas a Docker Hub
- Activa acciones con webhooks
Para empezar a utilizar Docker Hub, tendrás que crear tu primer repositorio. Simplemente tendrás que darle un nombre y especificar su visibilidad:
A continuación, puedes descargar Docker Desktop y empezar a sacar y empujar imágenes de contenedores desde Docker Hub. Verás estos empujes bajo la última etiqueta en tu nuevo repositorio.
¿Para Qué Se Usa Docker?
Docker está diseñado principalmente para DevOps y desarrolladores. Esta herramienta permite a los desarrolladores crear, personalizar y desplegar aplicaciones como contenedores portátiles y ligeros. Esta configuración empaqueta todas sus dependencias en una sola unidad, que puede ejecutarse en prácticamente cualquier sistema operativo.
Este es un caso típico de uso de Docker:
- Los desarrolladores escriben localmente el código, y luego lo comparten con sus equipos utilizando contenedores Docker.
- Empujan la aplicación a un entorno de staging donde es fácil realizar pruebas automatizadas y manuales.
- Cuando se localizan errores, los desarrolladores los solucionan en el entorno de desarrollo. Para probar los cambios, los vuelven a desplegar en el entorno de pruebas.
- Después de que los desarrolladores solucionen el error, la imagen actualizada se envía al entorno de producción.
Utilizando este flujo de trabajo, puedes probar un nuevo software sin realizar una instalación manual. Por ejemplo, puede resultarte difícil y tedioso configurar un servidor MySQL. En cambio, puedes utilizar la CLI de Docker para ejecutar esta tarea con un solo comando.
Como Docker tiene su propia CLI, los principiantes pueden utilizarla para aprender a manejar una línea de comandos. Después de configurar Docker en un entorno Linux, puedes empezar a utilizar los comandos de Linux. Entonces, podrás realizar las tareas administrativas del sistema de forma más rápida y eficiente.
Además, si quieres empezar a desarrollar sitios de WordPress locales y sin conexión, puedes utilizar Docker para instalar DevKinsta. Nuestra suite de desarrollo está basada en Docker, lo que te permite crear y gestionar sitios como contenedores individuales:
En comparación con otras herramientas de desarrollo local, DevKinsta utiliza menos recursos manteniendo un rendimiento casi nativo. Con un sitio DevKinsta alimentado por Docker, puedes desarrollar WordPress de forma rápida y segura. Además, DevKinsta facilita el envío de correos electrónicos de prueba y la realización de otras tareas administrativas.
Ventajas y Desventajas de Usar Docker
Ahora que entiendes los componentes principales de Docker, vamos a discutir sus principales ventajas y desventajas. Así podrás decidir si te será útil para gestionar tus aplicaciones de software.
Ventajas
Como desarrollador, parte de tu trabajo puede resultar tedioso y repetitivo cuando se realiza manualmente. Con los contenedores Docker, puedes programar la automatización de estas tareas. El uso de trabajos cron puede reducir significativamente tu carga de trabajo y optimizar tu tiempo.
Además, Docker es altamente portable. Permite que cada miembro de tu equipo de desarrollo trabaje en las aplicaciones, incluso con diferentes servidores, máquinas o sistemas operativos. Esta configuración puede eliminar muchos de los problemas que surgen de las incompatibilidades entre plataformas.
En comparación con las máquinas virtuales, los contenedores Docker pueden ahorrar más espacio. Aunque Docker y las VM funcionan de forma similar, Docker es mucho más ligero.
Además, Docker cuenta con una sólida comunidad. Si te unes a los eventos de la comunidad Docker, puedes conocer y conectar con otros usuarios de Docker tanto en persona como en línea:
También podrás navegar por los amplios foros de la comunidad Docker. Si eres principiante, estas discusiones pueden ayudarte a obtener consejos sobre el uso de esta plataforma.
Contras
Como hemos mencionado antes, Docker puede ser más eficiente que las máquinas virtuales. Sin embargo, ejecutar aplicaciones en un servidor físico suele ser significativamente más rápido.
Docker también puede implicar una empinada curva de aprendizaje. No está diseñado para ejecutar aplicaciones con una interfaz gráfica de usuario (GUI). Esto significa que tendrás que aprender la línea de comandos, lo que puede ser un reto para los principiantes.
Por último, los contenedores Docker se ejecutan en el sistema operativo de un anfitrión. La máquina anfitriona puede verse comprometida si se oculta algún software malicioso en estos contenedores.
¿Cómo Empezar con Docker?
Para empezar a utilizar Docker, tendrás que visitar el sitio web principal. Después, descarga la versión compatible con el sistema operativo de tu ordenador.
Si tienes un ordenador Mac, tendrás que elegir la versión de Docker para un chip Intel o un chip Apple. También hay opciones para usuarios de Windows y Linux.
Una vez que abras el archivo descargado, se instalará Docker Desktop en tu ordenador. A continuación, abre el Docker Hub y crea una nueva cuenta:
Ahora puedes abrir Docker Desktop e iniciar sesión. A continuación, abre tu línea de comandos o ventana bash y ejecuta este comando:
docker run -d -p 80:80 docker/getting-started
Una vez hecho esto, verás un nuevo contenedor en tu panel de Docker Desktop. Su nombre será generado aleatoriamente para tu cuenta:
También tendrás una nueva imagen Docker. Si navegas a la pestaña Imágenes, verás que hay una imagen docker/getting-started:
¡Ahora tienes todo lo que necesitas para empezar a gestionar tus contenedores locales!
Resumen
Si tienes que gestionar varias aplicaciones, Docker puede ser una herramienta eficaz para organizarlas de forma independiente. Como utiliza contenedores, Docker puede ayudarte a desarrollar cada aplicación sin el riesgo de que haya lenguajes de programación, bibliotecas o frameworks en conflicto.
Aunque Docker suele ser más eficiente que una máquina virtual (VM), trabajar en un servidor físico puede ser más rápido. Como también depende de una interfaz de línea de comandos, Docker puede no ser una gran opción para los principiantes absolutos.
Como desarrollador de WordPress, es probable que necesites crear rápidamente entornos de prueba locales. Con DevKinsta, puedes crear sitios de WordPress basados en Docker. Así podrás empezar a desarrollar temas y plugins sin conflictos