Skip to main content

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?

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ísticaMáquina VirtualContenedor Docker
Consumo de recursosAltoBajo
Tiempo de arranqueSegundos/minutosMilisegundos/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.

Volver al índice

Open chat
Hola, estic aqui per ajudar-te