home lab

Best 5 Home Server Projects to start learning Docker in 2025

The best 5 home server projects in 2025 to learn Docker and other skills like git. Start containerizing your apps and shifting from VMs now

I am a huge fan of projects to get started with using and becoming familiar with Docker. I think we will continue to see a shift to containerization from VMs due to the massive cost hikes from Broadcom. Most organizations will look to see how they can refactor their apps, minimize their VM estate and start becoming more efficient. Learning Docker in 2025 is a key to success moving forward. Let’s look at the best 5 home server projects to start learning in 2025.

Why learn Docker as a home server project?

Docker is the de facto standard for containerization. Its container technology is the foundation of what started the containerization movement. Docker hub has millions of container images and is the go to tool for developers, DevOps professionals, and those looking to streamline running their applications.

By learning docker, you are setting yourself up for understanding many other concepts and tools that will accelerate your journey into DevOps, Kubernetes, and other tools.

1. Pick a VM and migrate your application to a container

This is my favorite Docker home server project that I think anyone can embark on for learning. In your home lab, pick a solution that you are running inside a full virtual machine. I like to use the example of Pi-Hole since it is a favorite solution that runs in many home networks/home labs.

If you have your Pi-Hole container running in a virtual machine, spin this up in a container and then backup your configuration on your virtual machine instance, and restore this in your containerized Pi-Hole instance.

Your Pi-hole docker-compose code might look something like this:

pihole:
    image: pihole/pihole:latest
    container_name: pihole
    restart: always
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    dns:
      - 127.0.0.1
      - 1.1.1.1
    environment:
      TZ: 'America/Chicago'
      WEBPASSWORD: 'password'
      PIHOLE_DNS_: 1.1.1.1;9.9.9.9
      DNSSEC: 'false'
      WEBTHEME: default-dark
    volumes:
      - '~/homelabservices/pihole/pihole:/etc/pihole/'
      - '~/homelabservices/pihole/dnsmasq.d:/etc/dnsmasq.d/'
    networks:
      - pihole

networks:
  pihole:
    driver: bridge
    name: pihole
Pihole
Pihole

2. Stand up a reverse proxy container like Nginx Proxy Manager or Traefik

Spinning up a solution like Nginx Proxy Manager (NPM) or Traefik as one of your home server projects is a great way to introduce powerful SSL certificate management in your environment, both for containers, but also for your external hosts outside of your containerized environment.

We all know how much of a pain manually managing certificates can be. With a reverse proxy solution, you can terminate your SSL certificates in the proxy and have certificate automation that will automatically pull Let’s Encrypt certificates for your hostnames you have configured.

The simple code to configure Nginx Proxy Manager in docker-compose:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - npm

networks:
  npm:
    driver: bridge
    name: npm
Nginx proxy manager
Nginx proxy manager

Code for Traefik in Docker compose will look like the following example:

version: '3.8'

services:
  traefik2:
    image: traefik:latest
    restart: always
    command:
      # Discover containers using the Docker API
      - --providers.docker=true
      # Enable the Traefik dashboard
      - --api.dashboard=true
      # Set up Let's Encrypt with Cloudflare DNS challenge
      - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
      - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
      - --certificatesresolvers.letsencrypt.acme.email=<your_cloudflare_email>
      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
      # Set up HTTP listener to redirect all traffic to HTTPS
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      # Set up HTTPS listener with TLS configuration
      - --entrypoints.websecure.address=:443
      - --entrypoints.websecure.http.tls=true
      - --entrypoints.websecure.http.tls.certResolver=letsencrypt
      - --entrypoints.websecure.http.tls.domains[0].main=<your_domain>
      - --entrypoints.websecure.http.tls.domains[0].sans=*.<your_domain>
      - --serverstransport.insecureskipverify=true
    environment:
      CLOUDFLARE_EMAIL: "<your_cloudflare_email>"
      CLOUDFLARE_DNS_API_TOKEN: "<your_cloudflare_token>"
    ports:
      - "80:80"
      - "443:443"
    networks:
      - traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /yourvolumemountfolder/letsencrypt:/letsencrypt
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.yourdomain.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=strip"
      - "traefik.http.middlewares.strip.stripprefix.prefixes=/traefik"
    container_name: traefik

networks:
  traefik:
    driver: bridge
    name: traefik

3. Spin up a Docker GUI management tool

When most are learning Docker from the command line, it can be challenging to manage everything from the command line, especially when you are starting out. There are a couple of really good tools I would recommend. These are Portainer and Komodo.

Portainer is my favorite as it has the most features and functionality. Portainer also has a free 3-node version for Business Edition that has additional features you can take advantage of. Komodo is another solution that is free and open source. There is no charge to run Komodo and it provides many similar features as Portainer.

To install Portainer:

version: '3.8'

services:
  portainer:
    image: portainer/portainer-ce:2.21.5
    container_name: portainer
    restart: always
    ports:
      - "8000:8000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - portainer

volumes:
  portainer_data:

networks:
  portainer:
    driver: bridge
    name: portainer
Portainer
Portainer

To install Komodo, see my detailed blog post here on the steps:

4. Spin up a Docker Dashboard as a home server project

There are many “home lab dashboard” solutions out there that you can choose to spin up in the home lab as a Docker project. These are very handy. However, I found they lacked what I was trying to do in my home lab. So, I built my own Docker Dashboard container that connects to the docker hosts you specify and it pulls the information about containers running on the hosts.

When you are getting started with Docker you may quickly spin up dozens of containers and may not know exactly where you have which container running in the environment. This is where a docker dashboard comes in handy.

See my Github repo here on how to build your simple docker dashboard container:

After you build your container image, you can stand up the dashboard using the command:

version: "3.8"

services:
  docker-dashboard:
    image: docker-dashboard
    container_name: docker-dashboard
    environment:
      - CRON_SCHEDULE=*/5 * * * *
      - DOCKER_HOSTS=root@cldocker,root@cldocker01
      - TZ=America/Chicago
    ports:
      - "8080:80"
    volumes:
      - ./data:/var/www/html

networks:
  dashboard:
    driver: bridge
    name: dashboard
Docker dashboard
Docker dashboard

5. Spin up a Gitea code repo

Once you start getting into Docker, it lends itself very well to git processes, since you are working with Docker-compose code quite a bit. I like to keep up with my stacks and other Docker-compose code with Git since it is easy to forget where you placed certain compose code or you can’t remember how you have something configured.

Plus in the process, you will learn Git and Git repos methdologies, which is a great step in conjunction with learning docker as a home server project.

A basic template of docker-compose code for Gitea will look like the following that you can customize:

version: "3.8"

services:
  gitea:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=gitea-db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
      - GITEA__service__DISABLE_REGISTRATION=true
      - [email protected]
      - GITEA__mailer__ENABLED=true
      - GITEA__mailer__SMTP_ADDR=<your-server-ip-and-port>
      - [email protected]
      - GITEA__mailer__PROTOCOL=mail
    networks:
      - gitea
    volumes:
      - /yourvolumemountpath/gitea/data:/data
    restart: always

  gitea-db:
    image: mysql:8
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - /yourvolumemountpath/gitea-db/mysql-data:/var/lib/mysql
    restart: always

networks:
  gitea:
    driver: bridge
    name: gitea

    
Gitea
Gitea

Wrapping up

Are these 5 home server projects the only projects that you can tackle to learn Docker in 2025? Absolutely not. However, I think these projects listed above are ones that spring board into additional learning opportunities quickly and get you on your way to being proficient with Docker. Adding things like Git along with Docker learning will help you as well understand Git concepts and start using it in practical ways such as storing your docker-compose code.

Subscribe to VirtualizationHowto via Email ๐Ÿ””

Enter your email address to subscribe to this blog and receive notifications of new posts by email.



Brandon Lee

Brandon Lee is the Senior Writer, Engineer and owner at Virtualizationhowto.com, and a 7-time VMware vExpert, with over two decades of experience in Information Technology. Having worked for numerous Fortune 500 companies as well as in various industries, He has extensive experience in various IT segments and is a strong advocate for open source technologies. Brandon holds many industry certifications, loves the outdoors and spending time with family. Also, he goes through the effort of testing and troubleshooting issues, so you don't have to.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.