En esta entrada, os explicaremos qué es Docker, cuáles son sus beneficios y cómo instalarlo en una Raspberry Pi 5 con Ubuntu Server. Tenéis en la entrada Cómo instalar Ubuntu Server en un dispositivo Raspberry Pi 5, una guía completa y paso a paso sobre cómo hacer la instalación de Ubuntu Server en un dispositivo Raspberry Pi 5.
Índice
- ¿Qué es Docker?
- Características principales
- Ventajas de Docker
- Ejemplos prácticos de uso
- Guía paso a paso para instalar Docker en Raspberry Pi 5 con Ubuntu Server
- Gestión de contenedores. Docker Compose vs Kubernetes: ¿Cuándo usar uno u otro?
- Instalación y uso de Docker Compose
- Instalación y uso de Kubernetes en Raspberry Pi 5 con Ubuntu Server
- Interfaces gráficas para gestionar Docker en Raspberry Pi 5 con Ubuntu Server
- Conclusión
📌 ¿Qué es Docker?
Docker es una plataforma de código abierto que permite empaquetar, distribuir y ejecutar aplicaciones dentro de contenedores, ofreciendo una solución ligera y eficiente para la gestión de aplicaciones en diferentes entornos.
Los contenedores son entornos aislados que contienen todo lo necesario para ejecutar una aplicación, incluyendo el código, las bibliotecas y las dependencias. Esto permite garantizar que la aplicación funcione de la misma manera independientemente del sistema operativo o la infraestructura donde se ejecute.
A diferencia de las máquinas virtuales, que requieren un sistema operativo completo para cada instancia, Docker utiliza el mismo núcleo del sistema operativo y solo encapsula las aplicaciones y sus requisitos, haciendo que sean mucho más ligeras y rápidas de ejecutar. Esto se traduce en un **despliegue más ágil, una mejor eficiencia en el uso de recursos y una excelente portabilidad**.
Docker se ha convertido en una herramienta esencial en el desarrollo y despliegue de aplicaciones, facilitando la creación de entornos de desarrollo consistentes, la integración con sistemas de gestión de orquestación como **Docker Compose** y **Kubernetes**, y permitiendo escalar aplicaciones de manera eficiente.
🔹 Características principales
- Portabilidad
- Ligereza
- Escalabilidad
- Aislamiento
- Ejecución eficiente
🎯 Ventajas de Docker
1️⃣ Portabilidad y compatibilidad
Los contenedores Docker encapsulan todas las dependencias necesarias para que una aplicación se ejecute de manera consistente en cualquier entorno. Esto significa que una aplicación desarrollada y probada en un ordenador local se puede desplegar sin modificaciones en servidores, en la nube o en dispositivos de baja potencia como la Raspberry Pi.
Una de las principales ventajas de Docker es que elimina los **problemas de compatibilidad** entre diferentes sistemas operativos y configuraciones, ya que todo lo necesario para ejecutar la aplicación se encuentra dentro del contenedor. Esto evita situaciones típicas como «funciona en mi equipo, pero no en el servidor».
Además, Docker es compatible con diversas plataformas, incluyendo **Linux, Windows y macOS**, y puede ejecutar aplicaciones en arquitecturas como **x86, ARM y ARM64**, haciéndolo ideal para entornos variados, incluidos dispositivos IoT e infraestructuras en la nube.
Esta portabilidad también facilita la integración en **flujos de trabajo DevOps**, ya que los contenedores pueden ser empaquetados una vez y ejecutados en cualquier infraestructura, mejorando la velocidad de despliegue y reduciendo el riesgo de errores entre entornos de desarrollo, prueba y producción.
2️⃣ Eficiencia en el uso de recursos
Característica | Máquina Virtual | Contenedor Docker |
---|---|---|
Consumo de recursos | Alto | Bajo |
Tiempo de arranque | Segundos/minutos | Milisegundos/segundos |
3️⃣ Escalabilidad y despliegue rápido
Docker permite ejecutar múltiples contenedores en paralelo, facilitando la escalabilidad de las aplicaciones sin necesidad de configurar máquinas virtuales adicionales. Gracias a su ligereza, los contenedores se pueden iniciar en segundos, acelerando el despliegue y reduciendo el tiempo de inactividad.
Además, con herramientas como Docker Compose y Kubernetes, es posible automatizar la gestión de múltiples servicios y escalar las aplicaciones de manera dinámica según la demanda. Esto es especialmente útil en entornos de producción y microservicios, donde se requiere desplegar, actualizar y mantener aplicaciones de manera eficiente.
🛠️ Ejemplos prácticos de uso
1. Ejecución de un servidor web Nginx
docker run -d -p 8080:80 nginx
2. Ejecución de una base de datos PostgreSQL
docker run -d --name postgres -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres
3. Despliegue con Docker Compose
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: secret
🛠️ Guía paso a paso para su instalación en un entorno Ubuntu Server con Raspberry Pi 5
1️⃣ Actualizar el sistema
sudo apt update && sudo apt upgrade -y
2️⃣ Instalar dependencias
sudo apt install -y ca-certificates curl gnupg
3️⃣ Agregar el repositorio oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
4️⃣ Instalar Docker
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5️⃣ Activar e iniciar Docker
sudo systemctl enable --now docker
6️⃣ Agregar el usuario al grupo Docker
sudo usermod -aG docker $USER
newgrp docker
7️⃣ Probar Docker
docker run hello-world
🐳 Docker Compose vs Kubernetes: ¿Cuándo utilizar uno u otro?
Tanto Docker Compose como Kubernetes son herramientas para gestionar contenedores, pero están diseñadas para escenarios diferentes. A continuación, veremos cuándo utilizar cada una y por qué.
🔹 Docker Compose: Ideal para desarrollo y pequeños despliegues
¿Cuándo utilizar Docker Compose?
- 🏗 Desarrollo local: Para levantar rápidamente una base de datos, una API y un frontend.
- 🎯 Aplicaciones sencillas: Cuando no se requiere escalabilidad avanzada ni gestión de carga.
- 🚀 Prototipado y testing: Para pruebas y entornos de preproducción.
¿Por qué?
- ✅ Fácil de instalar y configurar.
- ✅ Basado en un archivo «docker-compose.yml» sencillo y legible.
- ✅ No requiere infraestructura adicional.
Ejemplo de uso (WordPress + MySQL):
version: '3.8'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: ejemplo
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
Para iniciar el entorno:
docker-compose up -d
—
🔹 Kubernetes: Diseñado para producción y entornos escalables
¿Cuándo utilizar Kubernetes?
- 🌍 Aplicaciones en producción: Para gestionar múltiples contenedores de manera eficiente.
- ⚙ Infraestructuras grandes y microservicios: Cuando se requieren servicios distribuidos.
- 🔄 Escalabilidad automática: Para adaptarse a la demanda.
- 📡 Orquestación avanzada: Para gestión de carga, actualizaciones progresivas y alta disponibilidad.
¿Por qué?
- ✅ Altamente escalable y automatizado.
- ✅ Incluye gestión de errores y autoreparación.
- ✅ Funciona en entornos multinube e híbridos.
Ejemplo de uso (Nginx en Kubernetes):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Para desplegar la aplicación:
kubectl apply -f deployment.yaml
—
🏆 ¿Qué herramienta elegir?
📌 Característica | 🐳 Docker Compose | ☸️ Kubernetes |
---|---|---|
Facilidad de uso | ✅ Más fácil | ❌ Más complejo |
Escalabilidad | ❌ Limitada | ✅ Altamente escalable |
Gestión de actualizaciones | ❌ Manual | ✅ Rolling updates |
Gestión de errores | ❌ Limitada | ✅ Autoreparación |
Orquestación avanzada | ❌ No disponible | ✅ Disponible |
Uso principal | 🌱 Desarrollo, testing | 🌍 Producción, apps escalables |
🔹 Si estás desarrollando en local o haciendo pruebas, usa Docker Compose.
🔹 Si necesitas escalar y gestionar contenedores en producción, usa Kubernetes.
⚙️ Instalación y uso de Docker Compose en Raspberry Pi con Ubuntu Server
Docker Compose es una herramienta que permite definir y gestionar aplicaciones multi-contenedor mediante un archivo docker-compose.yml
. Esto facilita el despliegue y la administración de entornos complejos sin necesidad de ejecutar manualmente múltiples comandos docker run
.
🔧 Pasos para instalar Docker Compose
1️⃣ Descargar e instalar la última versión de Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2️⃣ Asignar permisos de ejecución:
sudo chmod +x /usr/local/bin/docker-compose
3️⃣ Verificar la instalación:
docker-compose --version
Si la instalación fue exitosa, verás la versión de Docker Compose instalada en tu sistema.
🚀 Cómo funciona Docker Compose
Con Docker Compose, podemos definir una aplicación multi-contenedor en un archivo YAML y ejecutarla con un solo comando. Por ejemplo, este docker-compose.yml
define un servicio de WordPress con una base de datos MySQL:
version: '3.8'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: ejemplo
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: password
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: wordpress
Para iniciar este entorno, solo hay que ejecutar:
docker-compose up -d
Y para detenerlo:
docker-compose down
☸️ Instalación y uso de Kubernetes en Raspberry Pi 5 con Ubuntu
Kubernetes es una herramienta potente para orquestar contenedores, y con la Raspberry Pi 5 puedes crear un clúster ligero utilizando K3s, una versión simplificada de Kubernetes que consume menos recursos.
🔧 Instalación de Kubernetes (K3s) en Raspberry Pi 5
Para instalar Kubernetes en la Raspberry Pi 5 con Ubuntu, la mejor opción es K3s, ya que es más ligero y está optimizado para dispositivos con ARM.
📌 Requisitos previos
- ✅ Una Raspberry Pi 5 con Ubuntu 22.04 o superior instalado.
- ✅ Un SSD externo recomendado para mejor rendimiento.
- ✅ Acceso SSH a la Raspberry Pi.
- ✅ Docker instalado (opcional si quieres gestionar contenedores fuera de K3s).
- ✅ Usuario con permisos sudo.
📌 Instalación de K3s (Kubernetes ligero para ARM)
Para instalar K3s en la Raspberry Pi, simplemente ejecuta este comando:
curl -sfL https://get.k3s.io | sh -
Esto instalará K3s como servicio del sistema y pondrá en marcha un nodo maestro del clúster.
📌 Comprobar el estado de Kubernetes
Una vez instalado, verifica que el nodo está activo con:
sudo k3s kubectl get nodes
Deberías ver tu Raspberry Pi como nodo del clúster Kubernetes:
NAME STATUS ROLES AGE VERSION
raspberrypi Ready control-plane,master 1m v1.26.0+k3s1
🚀 Cómo funciona Kubernetes en Raspberry Pi
Ahora que tienes Kubernetes instalado en tu Raspberry Pi, puedes empezar a desplegar contenedores y servicios. K3s viene con kubectl
preinstalado, así que puedes ejecutar los mismos comandos que usarías en cualquier clúster Kubernetes.
📌 Ejemplo: Desplegar un contenedor Nginx en Raspberry Pi
Crea un archivo nginx-deployment.yaml
con este contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Aplica este Deployment con:
sudo k3s kubectl apply -f nginx-deployment.yaml
Para verificar que los Pods están en ejecución:
sudo k3s kubectl get pods
📌 Exponer el servicio para que sea accesible
Si quieres exponer la aplicación para que sea accesible desde otros dispositivos de tu red, crea un Service:
sudo k3s kubectl expose deployment nginx-deployment --type=NodePort --port=80
Ahora puedes ver qué puerto ha asignado Kubernetes con:
sudo k3s kubectl get services
Busca la línea del servicio nginx-deployment
y revisa el PORT(S)
asignado (ej: 30008). Luego, puedes acceder a la aplicación desde cualquier dispositivo en tu red mediante:
http://IP_DE_LA_RASPBERRY:30008
🔄 Reiniciar y administrar Kubernetes en la Raspberry Pi
Si necesitas reiniciar el servicio K3s:
sudo systemctl restart k3s
Para desinstalar Kubernetes si ya no lo necesitas:
sudo /usr/local/bin/k3s-uninstall.sh
🎯 Conclusión
Kubernetes en Raspberry Pi 5 con Ubuntu es una solución potente para probar y gestionar aplicaciones con contenedores en un entorno ligero. Gracias a K3s, podemos tener un clúster eficiente con mínimo consumo de recursos.
Si necesitas una solución más ligera para el desarrollo local, puedes optar por Docker Compose. Pero si quieres un clúster escalable con soporte para múltiples nodos y alta disponibilidad, Kubernetes es la mejor opción.
🖥️ Interfaces gráficas para gestionar Docker en Raspberry Pi 5 con Ubuntu Server
Si quieres gestionar Docker con una interfaz gráfica en la Raspberry Pi 5 con Ubuntu Server, tienes varias opciones. La mejor solución es Portainer, pero también puedes utilizar alternativas como LazyDocker (interfaz en terminal) o Yacht.
—
🔹 1. Portainer (Recomendado)
Portainer es una interfaz web ligera que permite gestionar contenedores, volúmenes, redes e imágenes de Docker de manera sencilla. Es compatible con arquitecturas ARM, como la Raspberry Pi 5.
✅ Ventajas de Portainer:
- ✔ Interfaz web intuitiva (accesible desde el navegador).
- ✔ Compatible con Raspberry Pi 5 y Ubuntu Server.
- ✔ Permite gestionar contenedores, volúmenes, redes y Docker Compose.
- ✔ Soporte para control de usuarios y permisos.
📌 Instalación de Portainer en Raspberry Pi 5
1️⃣ Crea un volumen para guardar la configuración:
docker volume create portainer_data
2️⃣ Ejecuta el contenedor de Portainer:
docker run -d -p 9000:9000 --name=portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest
3️⃣ Accede a la interfaz web:
- Abre el navegador y ve a
http://IP_DE_LA_RASPBERRY:9000
- Crea un usuario y contraseña
- Empieza a gestionar Docker gráficamente 🚀
—
🏆 Conclusión
- 🖥️ Portainer es la mejor opción para una gestión completa y sencilla vía web.
- 📟 LazyDocker es ideal si prefieres una interfaz en la terminal.
- 🚀 Yacht es una alternativa moderna, pero aún menos madura que Portainer.
Si quieres una gestión gráfica completa, instala Portainer. Si solo necesitas monitorear Docker rápidamente, LazyDocker es una buena opción. 🚀
💡 Conclusión
A lo largo de este artículo, hemos explorado cómo Docker ha revolucionado la manera de desplegar y gestionar aplicaciones mediante contenedores. Su simplicidad, eficiencia y capacidad de llevar aplicaciones a cualquier entorno lo convierten en una herramienta indispensable para desarrolladores y administradores de sistemas.
Hemos visto sus características principales y cómo sus ventajas facilitan la creación de entornos consistentes, escalables e independientes del sistema operativo. Además, a través de diversos ejemplos prácticos, hemos comprobado cómo Docker puede aplicarse en diferentes escenarios, desde desarrollo hasta producción.
Para los usuarios de **Raspberry Pi 5 con Ubuntu Server**, hemos detallado una guía de instalación paso a paso para poner en marcha Docker, adaptándolo a sistemas con arquitectura ARM. Además, hemos comparado las herramientas de gestión de contenedores, destacando cuándo es mejor utilizar **Docker Compose** para entornos sencillos y cuándo optar por **Kubernetes** para infraestructuras más complejas.
También hemos explicado cómo instalar y utilizar Docker Compose para gestionar aplicaciones multi-contenedor y Kubernetes (con K3s) para aprovechar la potencia de la orquestación de contenedores en una Raspberry Pi 5.
Finalmente, hemos explorado diferentes interfaces gráficas para gestionar Docker, como **Portainer**, **LazyDocker** y **Yacht**, facilitando el control y administración de los contenedores de manera visual e intuitiva.
En definitiva, Docker es una herramienta imprescindible para simplificar el despliegue de aplicaciones en contenedores, y con las herramientas adecuadas como **Docker Compose, Kubernetes y Portainer**, puedes optimizar tu flujo de trabajo y aprovechar al máximo la potencia de tu **Raspberry Pi 5 con Ubuntu Server**. 🚀
A pesar de sus ventajas, es importante tener en cuenta aspectos como la seguridad, la gestión de recursos y las actualizaciones de imágenes para garantizar un funcionamiento óptimo. Con un buen uso de sus funcionalidades, Docker se convierte en una solución imprescindible para desarrolladores, administradores de sistemas y equipos DevOps.