DEV Community

Cover image for Managing Docker Composes via GitOps - Conops
Anurag Gupta
Anurag Gupta

Posted on

Managing Docker Composes via GitOps - Conops

ConOps

GitOps for Docker Compose

Github: https://github.com/anuragxxd/conops
Website: https://conops.anuragxd.com

Push to Git → your server updates automatically. I genuinely like Kubernetes. The declarative model. Reconciliation loops.

The idea that a git push can trigger a deployment still feels clean and well designed.

But for my homelab and small side project it was too much. So I went back to Docker Compose. It’s simple. It works. When something breaks at 11pm, I can actually debug it.

The only thing I really missed was GitOps.


The problem

With plain Compose, my workflow looked like this:

  • Make changes locally
  • Push to Git
  • SSH into the server
  • git pull && docker compose up -d

But, if I forgot that last step, the server drifted.

If I tweaked something directly on the box, Git was no longer the source of truth.

Two months later I wouldn’t even trust what was running anymore. Which is not a great feeling.


So I built ConOps

Nothing fancy. Just a small controller that keeps:

Running state == Git state

It:

  • Watches your Git repo
  • Pulls changes automatically
  • Applies updates
  • Detects drift and fixes it

If a container is stopped manually, it brings it back.

If the repo changes, it reconciles.

No dashboards. No click-ops. Just Git as truth.


How to run it

docker run -d \
  -p 8080:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  anurag1201/conops:latest
Enter fullscreen mode Exit fullscreen mode

And you’re done. No CRDs. No etcd. No control plane. Just a small loop making sure things stay aligned.


Open source

It’s MIT licensed.

If you’re running Docker Compose on a server or homelab and kind of miss GitOps, this might help. Would love feedback. Issues. Criticism. Anything really.

And if you find it useful, please consider starring the repo:
https://github.com/anuragxxd/conops

Thanks!

Top comments (0)