Home ยป home lab ยป 10 Docker Projects You Can Build in a Weekend and Actually Use!
home lab

10 Docker Projects You Can Build in a Weekend and Actually Use!

Learn about 10 practical Docker projects you can build in a weekend with real-world use cases and Docker Compose examples for each.

Do yourself a favor and get accustomed to project-based learning. This is my philosophy to the most effective learning you can do. A home lab is a great way to do this. AND, getting into using containers will totally change your mindset on how you run your applications. Using Docker, you can totally spin up your containerized environment using simple Docker Compose code and even form these into stacks of apps that you can bring up and down as you want. Let’s look at 10 Docker Projects you can build in a weekend and that actually give you something you can use.

1. Gitea for Self-Hosted Git Repositories

Having your own self-hosted code repo is the way to go to start learning DevOps and infrastructure as code. It will help you get up to speed very quickly with git commands and learn the workflows of DevOps. Of course, the next decision is which solution should you host? Well, that is where Gitea is quickly becoming a favorite, due to the fact it is lightweight and it is almost a clone it looks like of GitHub which many are familiar with. I still prefer GitLab over all other solutions, but to begin with if you are looking for a Docker solution for code repo, Gitea is a great place to start.

Gitea for private code repository
Gitea for private code repository

You can use the example Docker Compose code below to get started with Gitea.

version: '3'

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ./gitea:/data
    ports:
      - "3000:3000"
      - "222:22"
    restart: always

2. Netdata to start monitoring

Netdata is one of the easiest monitoring solutions you will find for monitoring your home lab environment. It is easily installed with a lightweight agent that you install on your Linux and Windows hosts, and it picks up Docker containers you are running as well as Kubernetes metrics. And, I like that it is a simple container that you provision for getting it spun up.

Netdata for home lab monitoring
Netdata for home lab monitoring

Check out the following example Docker run code. Just enter your claim token and room ID:

docker run -d --name=netdata \
--pid=host \
--network=host \
-v netdataconfig:/etc/netdata \
-v netdatalib:/var/lib/netdata \
-v netdatacache:/var/cache/netdata \
-v /:/host/root:ro,rslave \
-v /etc/passwd:/host/etc/passwd:ro \
-v /etc/group:/host/etc/group:ro \
-v /etc/localtime:/etc/localtime:ro \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc/os-release:/host/etc/os-release:ro \
-v /var/log:/host/var/log:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /run/dbus:/run/dbus:ro \
--restart unless-stopped \
--cap-add SYS_PTRACE \
--cap-add SYS_ADMIN \
--security-opt apparmor=unconfined \
-e NETDATA_CLAIM_TOKEN=<your claim token \
-e NETDATA_CLAIM_URL=https://app.netdata.cloud \
-e NETDATA_CLAIM_ROOMS=<your claim room> \
netdata/netdata:stable

3. Nginx Proxy Manager to put SSL on everything

One of the best projects you can spin up is Nginx Proxy Manager. My recommendation for those that are getting into home labs is to start with Nginx Proxy Manager as it provides a simple GUI to manage your Docker container SSL certificates for your containers and easily lets you provision Lets Encrypt certs. Having SSL certs on your containers with web interfaces just makes everything more secure and work better with other solutions that may not deal well with self-signed certificates.

Nginx proxy manager for ssl certificates
Nginx proxy manager for ssl certificates

Check out the example Docker Compose code you can use to spin it up below:

version: '3'

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    restart: always

4. Vaultwarden for a self-hosted password manager

If you are looking for a password manager where you control all of your data and no one else has access to your secrets, then self-hosting this is a great way to make sure of that. Vaultwarden is one of the best known self-hosted password managers out there and has gained a reputation as one that is secure and does the job.

Vaultwarden community driven password manager
Vaultwarden community driven password manager

Check out the Docker compose code for an example Vaultwarden instance below:

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    volumes:
      - ./vw-data:/data
    ports:
      - "8080:80"
    restart: always

5. Watchtower to keep your containers updated

If there is a solution that helps you with lifecycle management with Docker, it is Watchtower. Watchtower is a solution that, on a schedule, checks yours containers to see if there is a new container image available. If it finds one it stops the container, pulls the new image, and restarts the container with the same configuration using the new image. Pretty cool. In case you are running Docker Swarm, there is a counterpart to Watchtower called Shepherd. It does basically the same thing with your Docker services.

Watchtower for container updates
Watchtower for container updates

Here is sample Docker Compose code that will get a basic instance of Watchtower up and running for you. The cleanup parameter tells Watchtower to clean up the old images which helps with housekeeping for your disk space.

version: '3'

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=300
    restart: always

6. Dozzle for container insights

Dozzle was a solution I just discovered not too long ago and realized what a great little tool it is. It lets you have a quick and easy view of your container logs across many different container hosts. With this, you can quickly view the logs for your containers no matter which host they are running on, without having to SSH into your Docker container hosts and run a docker logs <container name> command.

Dozzle for quick log insights for your docker containers
Dozzle for quick log insights for your docker containers
version: '3'

services:
  dozzle:
    image: amir20/dozzle:latest
    container_name: dozzle
    ports:
      - "8888:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always

7. Portainer is the best GUI for Docker

If you are looking for the best all around management tool for your Docker containers, Portainer is it. There are other free and open source tools out there, but I have tried them all and there are just none as polished and feature-rich as Portainer. If you don’t currently have a tool to manage your containers across hosts, do yourself a favor and implement Portainer over a weekend project and you will quickly reap the rewards of better management.

Portainer for the best docker container management
Portainer for the best docker container management

Portainer is also one of the best tools you can use if you are delving into Docker Swarm. It absolutely makes the Docker Swarm solution viable in my opinion with the great management features.

version: '3'

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

8. OpenWebUI + Ollama for self-hosted AI at home

This is a pair of solutions I have been playing around with the past few months and I have to say that self-hosting your own AI server is totally awesome. You don’t have to worry about API costs to the major cloud AI providers, and you keep control of your own data.

Also, it is not as hard as you might imagine to self-host your own AI either. With OpenWebUI and Ollama, you have a very ChatGPT like experience from the comforts of your own home lab.

Managing local llm models and address
pointing your openwebui instance to ollama

Below is example Docker Compose code to get you started with self-hosting private AI:

version: '3.8'

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    volumes:
      - ollama:/root/.ollama
    ports:
      - "11434:11434"
    restart: unless-stopped

  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    depends_on:
      - ollama
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    ports:
      - "3000:3000"
    volumes:
      - openwebui:/app/backend/data
    restart: unless-stopped

volumes:
  ollama:
  openwebui:

9. Home Assistant to get into smart home tech

The Home Assistant solution is absolutely the defacto standard in smart home self-hosting technologies. It is a complete management system for all of your smart home devices and allows you to control them from a single pane of glass interface.

Home assistant for smart home self hosting
Home assistant for smart home self hosting

Below is the same Docker Compose code I am running in my environment for Home Assistant and provides side car containers for use in forwarding messages if you need to your HomeAssistant environment.

version: '3.8'
services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    container_name: homeassistant
    user: "1001:1001"
    restart: unless-stopped
    network_mode: "service:proxy" # attach to Traefik sidecar for SSL
    depends_on:
      - mosquitto
    volumes:
      - /srv/homeassistant/config:/config:rw
      - homeassistant_db:/config/home-assistant_v2.db
    environment:
      - TZ=America/Chicago
    secrets:
      - api_key
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8123/api/health || exit 1"]
      interval: 1m
      timeout: 10s
      retries: 3
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETUID
      - SETGID

  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    restart: unless-stopped
    networks:
      homenet:
    volumes:
      - /srv/mosquitto/config:/mosquitto/config:ro
      - /srv/mosquitto/data:/mosquitto/data
      - /srv/mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"

  influxdb:
    image: influxdb:2.6
    container_name: influxdb
    restart: unless-stopped
    networks:
      homenet:
    volumes:
      - influxdb_data:/var/lib/influxdb2
    environment:
      - INFLUXDB_ADMIN_USER=admin
      - INFLUXDB_ADMIN_PASSWORD_FILE=/run/secrets/influxdb_admin_password
    secrets:
      - influxdb_admin_password
    ports:
      - "8086:8086"

  grafana:
    image: grafana/grafana:9.5
    container_name: grafana
    restart: unless-stopped
    networks:
      homenet:
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD_FILE=/run/secrets/grafana_admin_password
    secrets:
      - grafana_admin_password
    ports:
      - "3000:3000"


networks:
  homenet:
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

volumes:
  homeassistant_db:
  influxdb_data:
  grafana_data:

10. N8N to automate your workflows

The n8n solution is one of the coolest automation tools I have seen. It provides an easy way to automate entire workflows so that it takes the heavy lifting out of the process. You can think of it like your own self-hosted Zapier that provides hooks into just about any API solution out there. You can use it for automating Git updates, email alerts, file movements, or even things like Home Assistant triggers.

N8n for workflow automation
N8n for workflow automation

Below is the very basic Docker Compose code you will need. However, check out my recent blog post covering all the details of setup here: Automate Your Home Lab with n8n Workflow Automation and AI.

version: '3'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=changeme
      - TZ=America/New_York
    volumes:
      - ./n8n-data:/home/node/.n8n
    restart: always

Wrapping it

I get excited thinking about how far Docker projects have brought me in my own personal learning journey and I want to share this with others who are on the same learning path. By spinning up these Docker projects and others, you will set yourself up to learn a TON of new things around containerization, self-hosting, and how to manage modern app infrastructure. Let me know in the comments if you are running some of the projects covered here or if there are others you would recommend.

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.