Docker es una de las herramientas más populares en el mundo del desarrollo de software, especialmente en el ámbito de la virtualización y la gestión de aplicaciones. Empecemos por lo básico, partiendo con las definiciones y avanzamos en aspectos particulares más adelante.


¿Qué es Docker?

Docker es una plataforma de código abierto que permite a los desarrolladores crear, implementar y ejecutar aplicaciones en contenedores, ¿pero qué es un contenedor?

Un contenedor es una unidad ligera y portátil que incluye todo lo necesario para que una aplicación funcione: código, bibliotecas, dependencias y configuraciones. Más adelante encontrarás una definición formal tanto de imagen como de contenedor.

Esto asegura que las aplicaciones se ejecuten de manera consistente en cualquier entorno, ya sea en tu máquina local, en un servidor o en la nube.


Aspectos importantes de usar Docker

Docker ha revolucionado la forma en que se desarrollan y despliegan aplicaciones debido a sus múltiples beneficios:

  • Portabilidad: Los contenedores Docker funcionan de la misma manera en cualquier sistema operativo que soporte Docker, eliminando problemas de compatibilidad.
  • Eficiencia: Los contenedores son más ligeros que las máquinas virtuales, ya que comparten el kernel del sistema operativo, lo que reduce el uso de recursos.
  • Escalabilidad: Facilita la creación de entornos replicables, lo que permite escalar aplicaciones rápidamente.
  • Aislamiento: Cada contenedor es independiente, lo que evita conflictos entre aplicaciones o dependencias.
  • Automatización: Docker simplifica los procesos de integración y entrega continua (CI/CD).

Guía rápida de instalación

Para instalar Docker en tu sistema, sigue estos pasos básicos:

  1. Linux (Ubuntu): bashCopy Codesudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker
  2. Windows/Mac:
  • Descarga Docker Desktop desde docker.com.
  • Sigue las instrucciones del instalador.
  • Asegúrate de habilitar la integración con WSL 2 (en Windows).

Verifica la instalación:
Ejecuta el siguiente comando para confirmar que Docker está instalado correctamente: bashCopy Codedocker --version

Quieres un paso a paso de instalar Docker, acá te comparto un contenido donde mostramos la instalación en Windows usando WSL2, así que funciona también para Linux.


¿Qué es una imagen?

Una imagen en Docker es una plantilla inmutable que contiene todo lo necesario para ejecutar una aplicación, incluyendo el sistema operativo base, las dependencias y el código de la aplicación. Las imágenes son la base para crear contenedores y se almacenan en repositorios como Docker Hub.


¿Qué es un contenedor?

Un contenedor es una instancia en ejecución de una imagen. Es un entorno aislado que ejecuta una aplicación de manera independiente. Los contenedores son ligeros, rápidos y desechables, lo que significa que puedes detenerlos, eliminarlos y recrearlos fácilmente.


¿Cómo correr un contenedor de una imagen?

Para ejecutar un contenedor a partir de una imagen, utiliza el siguiente comando:

docker run -d --name nombre_del_contenedor imagen

Por ejemplo, para ejecutar un servidor web Nginx:

docker run -d --name mi_nginx -p 8080:80 nginx

Este comando ejecuta un contenedor en segundo plano (-d), lo nombra como mi_nginx y mapea el puerto 80 del contenedor al puerto 8080 de tu máquina.

Con esto tendras un servidor web en tu máquina ejecutandose en el puerto 8080.


¿Qué es dockerizar una aplicación?

Dockerizar una aplicación significa empaquetarla en un contenedor Docker para que pueda ejecutarse de manera consistente en cualquier entorno. Esto incluye agregar todas las dependencias, configuraciones y scripts necesarios en una imagen Docker.


¿Qué es el Dockerfile?

El Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen Docker. Cada instrucción en el Dockerfile define una capa en la imagen, lo que permite que Docker reutilice capas anteriores para optimizar el proceso de construcción.


Comandos básicos del Dockerfile

Algunos comandos comunes en un Dockerfile son:

  • FROM: Define la imagen base. dockerfileCopy CodeFROM node:16
  • WORKDIR: Establece el directorio de trabajo dentro del contenedor. dockerfileCopy CodeWORKDIR /app
  • COPY: Copia archivos desde el sistema host al contenedor. dockerfileCopy CodeCOPY . .
  • RUN: Ejecuta comandos durante la construcción de la imagen. dockerfileCopy CodeRUN npm install
  • CMD: Define el comando que se ejecutará cuando el contenedor inicie. dockerfileCopy CodeCMD ["npm", "start"]

¿Cómo dockerizar una aplicación Node.js?

Para dockerizar una aplicación Node.js, sigue estos pasos:

Crea un archivo Dockerfile:
Este archivo define cómo se construirá la imagen Docker. Un ejemplo básico para una aplicación Node.js sería:

# Usa una imagen base de Node.js 
FROM node:16 

# Establece el directorio de trabajo 
WORKDIR /app 

# Copia la definición del proyecto 
COPY package*.json ./ 

#Carga las dependencias
RUN npm install 

# Copia los archivos de la aplicación 
COPY . . 

# Expone el puerto de la aplicación 
EXPOSE 3000 

# Comando para ejecutar la aplicación 
CMD ["npm", "start"]

Crea un archivo .dockerignore:
Este archivo especifica qué archivos o carpetas deben excluirse al construir la imagen. Por ejemplo:

node_modules  
npm-debug.log  

Construye la imagen:

docker build -t mi_app_node .

Ejecuta el contenedor:

docker run -d -p 3000:3000 mi_app_node

Importancia del archivo .dockerignore

El archivo .dockerignore es crucial para optimizar el proceso de construcción de imágenes Docker. Este archivo especifica qué archivos o carpetas deben excluirse al construir la imagen, lo que reduce el tamaño de la imagen y mejora la seguridad al evitar incluir archivos sensibles o innecesarios, como:

  • Archivos de configuración locales.
  • Dependencias ya instaladas (como node_modules).
  • Archivos temporales o de depuración.

Un ejemplo de .dockerignore sería:

node_modules  
*.log  
.env  

Veamos un ejemplo práctico de como dockerizar una aplicación Node.