Right, so you've got Proxmox up and running on your homelab box — nice one. But a hypervisor with no VMs is like a barbie with no snags. Time to fix that. In this post we're going to spin up your first Ubuntu Server VM, get Docker installed, and then set up Portainer and Dozzle so you've got a proper web UI for managing your containers and watching logs. Once this is done, you'll have the foundation to run pretty much anything.

Creating the Ubuntu VM in Proxmox

First things first, we need an operating system to install. Ubuntu Server 24.04 LTS is a ripper choice — it's stable, well-supported, and has a massive community if you get stuck.

Step 1: Grab the Ubuntu Server ISO

Head over to the Ubuntu Server download page and grab the 24.04 LTS ISO. Then jump into your Proxmox web UI, navigate to your local storage on the left, click ISO Images, and hit Upload. Chuck the ISO file in there and wait for it to finish.

Step 2: Create the VM

In Proxmox, click Create VM up the top right. Here's what to set:

  1. General: Give it a VM ID and a name — something like docker-host so you know what it's for.
  2. OS: Select the Ubuntu Server 24.04 ISO you just uploaded.
  3. System: Defaults are fine here. Leave it as is.
  4. Disks: Set the disk size to 32-50GB. That's plenty to get started — you can always expand it later.
  5. CPU: Give it 2-4 cores. Two is enough to start, but if your host has cores to spare, four makes things snappier.
  6. Memory: 4-8GB of RAM. Again, start with 4GB and bump it up if you need to — Proxmox lets you change this without too much drama.
  7. Network: Leave the default (vmbr0). It'll pick up an IP via DHCP, or you can set a static IP inside Ubuntu later (which I'd recommend for a server).

Click Finish and you've got yourself a VM.

Step 3: Install Ubuntu Server

Select your new VM in the sidebar, hit Start, then click Console to open the virtual screen. You'll see the Ubuntu installer boot up. Run through the prompts — most of the defaults are fine. Pick your language, set up your disk, create your user account.

Important: When you get to the software selection screen, make sure you tick "Install OpenSSH server". This lets you SSH into the VM from your main machine instead of using the Proxmox console every time. Trust me, you want this.

Once the install finishes, the VM will reboot. Log in with the username and password you set during installation.

Step 4: Note Your IP Address

Run this to find your VM's IP address:

ip a

Look for the IP on your main network interface (usually eth0 or ens18). Jot it down — you'll need it to access Portainer and Dozzle later. From here, you can SSH in from your desktop or laptop:

ssh your-username@your-vm-ip

Much nicer than the Proxmox console, right?

Installing Docker

Now for the good stuff. Docker is what lets you run containers — lightweight, isolated applications that are dead easy to deploy and manage. Let's get it installed.

First, update your system and install Docker using the official convenience script:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

That last command adds your user to the docker group so you don't have to type sudo before every Docker command. You'll need to log out and back in for it to take effect:

logout

SSH back in and test that Docker's working:

docker run hello-world

If you see a friendly message from Docker saying everything's working, you're golden. If not, double-check you logged out and back in properly.

Installing Portainer

Docker from the command line is powerful, but sometimes you just want a nice web UI to see what's going on. That's where Portainer comes in. It's a container management platform that gives you a visual dashboard for your Docker environment.

With Portainer you can:

  • See all your running containers at a glance
  • Deploy new containers and stacks (Docker Compose) from the browser
  • Monitor container resource usage (CPU, memory, network)
  • View container logs
  • Manage volumes, networks, and images
  • Start, stop, and restart containers with a click

Let's set it up. First, create a volume for Portainer's data:

docker volume create portainer_data

Then run the Portainer container:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Give it a few seconds to start up, then open your browser and head to:

https://your-vm-ip:9443
Note: Your browser will complain about the SSL certificate being self-signed. That's normal — just click through the warning. It's your own server, she'll be right.

On your first visit, Portainer will ask you to create an admin account. Pick a strong password and you're in. Select "Get Started" to connect to your local Docker environment and you'll land on the dashboard. Have a poke around — it's pretty intuitive.

Installing Dozzle

Portainer can show you container logs, but Dozzle does it better. It's a lightweight, real-time log viewer for Docker containers. No database, no storage — it just streams live logs straight from your containers to a clean web UI. It's one of those tools you didn't know you needed until you have it.

What Dozzle gives you:

  • Real-time log streaming for all your containers
  • Search and filter logs on the fly
  • View multiple container logs side by side
  • Tiny footprint — barely uses any resources
  • No configuration needed, just run it and go

Install it with a single command:

docker run -d --name dozzle --restart=always \
  -p 9999:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  amir20/dozzle:latest

Access it at:

http://your-vm-ip:9999

That's literally it. No accounts, no setup wizard — just open it up and you'll see all your running containers with their logs streaming in real time. Click on any container to see its output. When something goes wrong with a container (and it will eventually), Dozzle is the first place you'll look.

What's Next?

Have a look at that — you've gone from a bare Proxmox install to a fully kitted-out Docker host with a management UI and a log viewer. Not bad for an arvo's work.

From here, the world's your oyster. You can deploy pretty much anything as a Docker container:

  • Pi-hole — Network-wide ad blocking
  • Stirling-PDF — Self-hosted PDF toolkit
  • n8n — Workflow automation
  • Jellyfin / Plex — Media servers
  • Home Assistant — Smart home automation
  • Uptime Kuma — Service monitoring
  • And hundreds more...
Tip: Bookmark your Portainer (https://your-vm-ip:9443) and Dozzle (http://your-vm-ip:9999) URLs right now. You'll be using them constantly. I've got mine pinned in my browser and I check them daily.

In the next posts in this homelab series, we'll start deploying some of these services and look at setting up reverse proxies, backups, and more. Stay tuned.