AI & Jellyfin: Difference between revisions
Wikisailor (talk | contribs) Created page with "== Docker Applications installed on Quince == ===Installation Strategy=== Once the Blackwell GPU passthrough was verified on the Pear host, we transitioned to the Quince VM to set up the containerized environment. This allows us to run high-performance AI (Ollama) and media (Jellyfin) apps while keeping the base OS clean. ===Docker Engine Installation=== We use the official Docker repository to ensure access to v29+, which includes critical patches for Gen 5 PCIe and..." |
Wikisailor (talk | contribs) |
||
| Line 28: | Line 28: | ||
sudo systemctl restart docker | sudo systemctl restart docker | ||
===Verification & First App: Ollama === | ===Verification & First App: Ollama === | ||
'''Update''' all Container yaml are separate | |||
We used the "Pull-on-Demand" feature to deploy Ollama. Docker automatically fetched the image from Docker Hub since it wasn't in the local "storage locker." | We used the "Pull-on-Demand" feature to deploy Ollama. Docker automatically fetched the image from Docker Hub since it wasn't in the local "storage locker." | ||
docker run -d \ | docker run -d \ | ||
Revision as of 09:00, 11 February 2026
Docker Applications installed on Quince
Installation Strategy
Once the Blackwell GPU passthrough was verified on the Pear host, we transitioned to the Quince VM to set up the containerized environment. This allows us to run high-performance AI (Ollama) and media (Jellyfin) apps while keeping the base OS clean.
Docker Engine Installation
We use the official Docker repository to ensure access to v29+, which includes critical patches for Gen 5 PCIe and Blackwell architecture support.
sudo apt update sudo apt install ca-certificates curl gnupg
Then setup the repository
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Next Install Engine & Compose
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
NVIDIA Container Toolkit (The "Magic Bridge")
This toolkit enables the libnvidia-container library, which maps the physical GPU device files (/dev/nvidia0, etc.) into the virtualized Docker namespace.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update sudo apt install -y nvidia-container-toolkit
and last we configure the Nvidia Container tool Kit and restart Docker
sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker
Verification & First App: Ollama
Update all Container yaml are separate
We used the "Pull-on-Demand" feature to deploy Ollama. Docker automatically fetched the image from Docker Hub since it wasn't in the local "storage locker."
docker run -d \ --gpus all \ -v ollama:/root/.ollama \ -p 11434:11434 \ --name ollama \ --restart unless-stopped \ ollama/ollama
Note on Parameters
- --gpus all: Crucial. Without this, the container sees a CPU only.
- -v ollama:/root/.ollama: Preserves model weights (like Qwen or Llama) even if the container is deleted/upgraded.
- Storage Logic: Docker Hub images are immutable; any changes you want to keep (like downloaded AI models) must be stored in a volume -v.
- --restart unless-stopped: Ensures your AI is always online after a reboot.
- Docker identifies the "app" by the Image Name at the very end of your command In this case, the name was ollama/ollama. Docker treats this like a URL. It looks at its local "storage locker" first. If it doesn't see ollama/ollama there, it automatically reaches out to Docker Hub (the global library of apps) to find it. This is the "Pull-on-Demand" feature.
- Status Check: After running this, use docker exec -it ollama nvidia-smi to prove the container sees the Blackwell card.
Final Integration Step
With Docker verified, we move from manual docker run commands to Docker Compose (.yaml). This allows for "Infrastructure as Code," where we can define our 16GB VRAM reservations and Pearpool log paths in a single, repeatable file.
The "Blackwell Stack" Compose File for Quince
The Compose file should be created in the home directory
nano ~/compose.yaml
The configuration for Quince to use the 16GB VRAM of the 5060 Ti efficiently is as follows.
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
network_mode: host # Best for DLNA/local discovery
user: 1000:1000 # Assuming nigel is UID 1000
volumes:
- /mnt/jellyfin/docker/jellyfin/config:/config
- /mnt/jellyfin/docker/jellyfin/cache:/cache
- /mnt/jellyfin:/media
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu, video]
restart: unless-stopped
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- /mnt/jellyfin/docker/ollama:/root/.ollama
ports:
- "11434:11434"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
volumes:
- /mnt/jellyfin/docker/open-webui:/app/data
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_SECRET_KEY=change_me_to_a_long_random_string' # Crucial for security
- 'ENABLE_SIGNUP=true' # Set to false after you create your account
ports:
- "3000:8080"
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
If the test container is still running stop it with the command
docker stop ollama && docker rm ollama
Launch the stack with
docker compose up -d
Verify the three apps are running with
docker ps
change the secretkey to a random string for security
'WEBUI_SECRET_KEY=change_me_to_a_long_random_string' # Crucial for security
Once the OpenWebui has been logged in with a username and password change the signup to false
- 'ENABLE_SIGNUP=true' # Set to false after you create your account