<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anurag Gupta</title>
    <description>The latest articles on DEV Community by Anurag Gupta (@anuraggupta).</description>
    <link>https://dev.to/anuraggupta</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F438867%2Fcf108f37-82f9-4a4f-8fc6-55686ba7b618.png</url>
      <title>DEV Community: Anurag Gupta</title>
      <link>https://dev.to/anuraggupta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anuraggupta"/>
    <language>en</language>
    <item>
      <title>Managing Docker Composes via GitOps - Conops</title>
      <dc:creator>Anurag Gupta</dc:creator>
      <pubDate>Wed, 18 Feb 2026 09:40:41 +0000</pubDate>
      <link>https://dev.to/anuraggupta/managing-docker-composes-via-gitops-conops-54be</link>
      <guid>https://dev.to/anuraggupta/managing-docker-composes-via-gitops-conops-54be</guid>
      <description>&lt;h2&gt;
  
  
  ConOps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitOps for Docker Compose&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/anuragxxd/conops" rel="noopener noreferrer"&gt;https://github.com/anuragxxd/conops&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://conops.anuragxd.com" rel="noopener noreferrer"&gt;https://conops.anuragxd.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Push to Git → your server updates automatically. I genuinely like Kubernetes. The declarative model. Reconciliation loops.&lt;br&gt;&lt;br&gt;
The idea that a &lt;code&gt;git push&lt;/code&gt; can trigger a deployment still feels clean and well designed.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The only thing I really missed was GitOps.&lt;/p&gt;




&lt;h3&gt;
  
  
  The problem
&lt;/h3&gt;

&lt;p&gt;With plain Compose, my workflow looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make changes locally
&lt;/li&gt;
&lt;li&gt;Push to Git
&lt;/li&gt;
&lt;li&gt;SSH into the server
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git pull &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But, if I forgot that last step, the server drifted.&lt;/p&gt;

&lt;p&gt;If I tweaked something directly on the box, Git was no longer the source of truth.&lt;/p&gt;

&lt;p&gt;Two months later I wouldn’t even trust what was running anymore. Which is not a great feeling.&lt;/p&gt;




&lt;h3&gt;
  
  
  So I built &lt;strong&gt;ConOps&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Nothing fancy. Just a small controller that keeps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running state == Git state&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watches your Git repo
&lt;/li&gt;
&lt;li&gt;Pulls changes automatically
&lt;/li&gt;
&lt;li&gt;Applies updates
&lt;/li&gt;
&lt;li&gt;Detects drift and fixes it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a container is stopped manually, it brings it back.&lt;br&gt;&lt;br&gt;
If the repo changes, it reconciles.&lt;/p&gt;

&lt;p&gt;No dashboards. No click-ops. Just Git as truth.&lt;/p&gt;




&lt;h3&gt;
  
  
  How to run it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock &lt;span class="se"&gt;\&lt;/span&gt;
  anurag1201/conops:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you’re done. No CRDs. No etcd. No control plane. Just a small loop making sure things stay aligned.&lt;/p&gt;




&lt;h3&gt;
  
  
  Open source
&lt;/h3&gt;

&lt;p&gt;It’s MIT licensed.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;And if you find it useful, please consider starring the repo:&lt;br&gt;
&lt;a href="https://github.com/anuragxxd/conops" rel="noopener noreferrer"&gt;https://github.com/anuragxxd/conops&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>opensource</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
