Contenedor: nova_container (Local Distribuido en Redes Xubuntu)
nova_container: Manual
1. Introducción
Este manual detalla paso a paso cómo configurar un sistema distribuido en Xubuntu utilizando Docker y contenedores LXC. Se explicará cómo compartir CPU y GPU entre varias máquinas, configurar redes internas, y administrar aplicaciones dentro del contenedor.
2. Instalación de Docker y Dependencias
En todas las máquinas de la red:
- Actualizar paquetes:
sudo apt update && sudo apt upgrade -y
- Instalar dependencias necesarias:
sudo apt install -y curl ca-certificates gnupg lsb-release
- Agregar clave GPG y repositorio oficial de Docker:
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null echo "deb [arch=$(dpkg --print-architecture) 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
- Instalar Docker y sus componentes:
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Añadir el usuario al grupo Docker para evitar usar
sudo
constantemente:sudo usermod -aG docker $USER newgrp docker
- Verificar que Docker funciona:
docker run hello-world
3. Configuración de la Red Distribuida
Docker crea automáticamente redes internas, pero configuraremos una personalizada para interconectar las máquinas:
- En la máquina principal, crear una red Docker:
docker network create \ --driver=overlay \ --attachable \ --subnet=192.168.100.0/24 \ nova_network
- Verificar la red:
docker network ls
- En las demás máquinas, unirse a la red:
docker network connect nova_network $(hostname)
4. Configuración del Contenedor Principal
Crear y ejecutar un contenedor con acceso a la GPU y CPU compartida
- En la máquina principal, descargar la imagen base:
docker pull nvidia/cuda:12.1.1-runtime-ubuntu20.04
- Ejecutar un contenedor con acceso a la GPU:
docker run -dit --name nova_container --network=nova_network \ --gpus all -v /dev:/dev --privileged \ -p 8888:8888 -p 5000:5000 \ nvidia/cuda:12.1.1-runtime-ubuntu20.04 bash
- Acceder al contenedor:
docker exec -it nova_container bash
5. Compartir Recursos de Otras Máquinas
a) Compartir CPU con otras máquinas
- En las máquinas esclavas, instalar Docker y habilitar SSH:
sudo apt install -y openssh-server sudo systemctl enable --now ssh
- Agregar cada nodo como Worker en el Swarm:
docker swarm join --token <TOKEN_GENERADO> <IP_PRINCIPAL>:2377
- Verificar los nodos activos:
docker node ls
b) Compartir GPU de otros nodos (Si tienen GPU Nvidia)
- Instalar drivers Nvidia y el runtime en los nodos esclavos:
sudo apt install -y nvidia-driver nvidia-container-toolkit
- Ejecutar en cada nodo esclavo para verificar la GPU:
nvidia-smi
- Agregar la GPU compartida a un contenedor desde otro nodo:
docker run --rm --gpus all nvidia/cuda:12.1.1-runtime-ubuntu20.04 nvidia-smi
6. Administración de Contenedores y Aplicaciones
a) Ejecutar una aplicación en el contenedor
Ejemplo: Levantar Jupyter Notebook dentro del contenedor con acceso a GPU y CPU distribuida.
docker exec -it nova_container bash -c "pip install jupyter && jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root"
Acceder desde el navegador: http://<IP_DEL_CONTENEDOR>:8888
b) Guardar cambios en una imagen nueva
Para no perder configuraciones dentro del contenedor:
docker commit nova_container nova_image:v1
c) Iniciar y detener el contenedor
docker start nova_container
docker stop nova_container
d) Eliminar contenedor e imagen
docker rm nova_container
docker rmi nova_image:v1
7. Interfaz Gráfica para Docker (Opcional)
Se puede usar Portainer para administrar los contenedores desde un navegador:
- Instalar Portainer:
docker volume create portainer_data docker run -d -p 9000:9000 -p 8000:8000 --name=portainer --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer-ce
- Acceder desde el navegador:
http://<IP_DEL_SERVIDOR>:9000
8. Conclusión
Con este manual, hemos configurado un entorno distribuido en Xubuntu donde los recursos de CPU y GPU pueden ser compartidos entre varias máquinas mediante Docker y Swarm. Además, hemos aprendido a administrar contenedores y ejecutar aplicaciones dentro de ellos. Ahora puedes correr modelos y aplicaciones en un entorno distribuido y escalable.
Comentarios
Publicar un comentario
Te invitamos a comentar y compartir tus impresiones y pensamientos sobre este artículo