<?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: Prappo</title>
    <description>The latest articles on DEV Community by Prappo (@prappo).</description>
    <link>https://dev.to/prappo</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595088%2F2ea958b1-e104-4e30-bdd5-b7670dd326e2.jpg</url>
      <title>DEV Community: Prappo</title>
      <link>https://dev.to/prappo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prappo"/>
    <language>en</language>
    <item>
      <title>What Really Happens Inside a RAG Pipeline? (Behind the Scenes)</title>
      <dc:creator>Prappo</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:09:33 +0000</pubDate>
      <link>https://dev.to/prappo/what-really-happens-inside-a-rag-pipeline-behind-the-scenes-4pgl</link>
      <guid>https://dev.to/prappo/what-really-happens-inside-a-rag-pipeline-behind-the-scenes-4pgl</guid>
      <description>&lt;p&gt;Most articles about Retrieval Augmented Generation ( RAG ) give you the Hollywood trailer version like User Questions -&amp;gt; Retrieve Documents -&amp;gt; LLM -&amp;gt; Answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zonehs40j0oepm3hnu9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zonehs40j0oepm3hnu9.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cute, But that skips over all the actual magic. The part where a computer sifts through millions of documents in milliseconds and somehow knows which tiny paragraph is the one you need.&lt;/p&gt;

&lt;p&gt;This isn't another "RAG 101" article.  We' are going backstage. We're pooping the hood. We're going to see what actually happens from the moment your documents gets uploaded to the moment your LLM spits out an answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pipeline Hollywood Doesn't Show you
&lt;/h2&gt;

&lt;p&gt;Here's what a real production RAG system looks like behind the curtain:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwyuvz45gmbpfmsvova5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiwyuvz45gmbpfmsvova5.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real brainwork happens before the LLM even wakes up. For unsung heroes do the heavy lifting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embeddings = Turn words into math&lt;/li&gt;
&lt;li&gt;Similarity search - finding "close enough" matches&lt;/li&gt;
&lt;li&gt;ANN ( Approximate Nearest Neighbor ) - cheating (smartly) to go fast&lt;/li&gt;
&lt;li&gt;HNSW - the secret graph sauce&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's crack each one open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Turning Language Into Numbers ( Because Computers Are Math Nerds)
&lt;/h2&gt;

&lt;p&gt;Computers don't speak human. They speak numbers. So before any document can be searched, every chunk of text gets converted into a list of numbers called an embedding.&lt;/p&gt;

&lt;p&gt;For example &lt;/p&gt;

&lt;p&gt;"The cat is sleeping."&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;[-0.42, 0.91, 0.17, ..., 0.54]&lt;/p&gt;

&lt;p&gt;But there's the wild part: these aren't just a few numbers. Modern models crank out vectors with hundreds or thousands of dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Dimensions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small fry&lt;/td&gt;
&lt;td&gt;384&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;768&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beefy&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chunky&lt;/td&gt;
&lt;td&gt;1536&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Absolute unit&lt;/td&gt;
&lt;td&gt;3072&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each dimension captures some tiny semantic signal learned during training. But here's the kicker: no single dimension means anything on its own. Dimension #237 isn't "cats". Dimension #918 isn't "animals". Meaning only emerges from how all the dimensions relate to each other. Think of it like a point in the space with 768 dimensions. ( Yes , your brain hurts, That's normal.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Similar Meaning = Nearby Vectors
&lt;/h2&gt;

&lt;p&gt;Imagine a simple 2D world (because we can't draw 768D):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dogs
   🐕

Cats
    🐈

Cars                     🚗

Airplanes                          ✈️
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similar stuff clusters together. Real embedding spaces are 768D+, but the same rule applies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dogs are near wolves&lt;/li&gt;
&lt;li&gt;Paris is near France&lt;/li&gt;
&lt;li&gt;Python is near programming&lt;/li&gt;
&lt;li&gt;Apple(fruit) and Apple(compnay) live in totally different neighborhoods depending on context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This geometric clustering is what makes semantic search possible. It's not magic - It's geometry at a scale your brain refuses to visualize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Your Question Gets the Same Treatment
&lt;/h2&gt;

&lt;p&gt;You ask :&lt;br&gt;
&lt;code&gt;"How do I reset my password?"&lt;/code&gt;&lt;br&gt;
Your query goes through the exact same embedding model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❓ User Question

    ↓

🧮 Embedding Model

    ↓

📍 Query Vector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Millions of document vectors&lt;/li&gt;
&lt;li&gt;One lonely query vector&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The million-dollar question:&lt;br&gt;
&lt;code&gt;Which document vectors are closest to this query vector?&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Measuring Semantic Similarity ( a.k.a "How Close Are We?")
&lt;/h2&gt;

&lt;p&gt;The go-to metric? Cosine similarity.&lt;/p&gt;

&lt;p&gt;Wait, Why Not Just Euclidean Distance?&lt;br&gt;
Imagine these vectors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A = [1, 1]
B = [2, 2]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Euclidean distance says they're different because B is farther from the origin. But semantically? They're pointing in the exact same direction. Same vibe, different magnitude.&lt;/p&gt;

&lt;p&gt;That's why embedding systems care more about direction than raw distance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cosine Similarity: The Angle Game
&lt;/h2&gt;

&lt;p&gt;Cosine similarity measures the angle between two vectors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          📍 Query
            ▲
           /
          /
         /
        /
       ●────────► 📄 Document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Angle&lt;/th&gt;
&lt;th&gt;What It Means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0°&lt;/td&gt;
&lt;td&gt;Basically the same thing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20°&lt;/td&gt;
&lt;td&gt;Very similar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;90°&lt;/td&gt;
&lt;td&gt;Unrelated (orthogonal vibes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;180°&lt;/td&gt;
&lt;td&gt;Opposite&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cos(θ) = (A · B) / (|A| × |B|)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where A · B is the dot product and |A|,|B| are the magnitudes.&lt;/p&gt;

&lt;p&gt;Result ranges from -1 to 1. In practice, after normalization, most similarities land between 0 and 1. higher = closer = more relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Finding the Closest Vectors ( The Brute Force Problem)
&lt;/h2&gt;

&lt;p&gt;Now imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 million document vectors&lt;/li&gt;
&lt;li&gt;Each with 1536 dimentions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A naive approach? Compare your query against every single one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❓ Query

    ↓

📄 Vector 1
📄 Vector 2
📄 Vector 3
...
📄 Vector 50,000,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if each comparison is lightning-fast, 50 million x anything = too slow for real-time use.&lt;/p&gt;

&lt;p&gt;This is exact nearest neighbor search. It guarantees the best answer, but the cost grows linearly with your data. For big systems? Unacceptable.&lt;/p&gt;

&lt;h2&gt;
  
  
  ANN: The Art of Smart Cheating
&lt;/h2&gt;

&lt;p&gt;Enter Approximate Nearest Neighbor ( ANN ). Instead of checking everything, ANN asks a slightly different question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Can we find vectors that are almost certainly among the nearest neighbors -- without looking at everything?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's a tradeoff: a tiny bit of accuracy for a massive speed boost. For most RAG system? Totally worth it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Parking Lot Analogy
&lt;/h3&gt;

&lt;p&gt;Imagine looking for your parked car.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brute force: Check every single parking space. Guaranteed to find it. Takes forever.&lt;/li&gt;
&lt;li&gt;ANN: Head straight to the section where you usually park. You might miss the absolute closet spot in rare cases, but you'll find your car way faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ANN works the same way. Instead of searching the entire universe of vectors, it intelligently narrows down where to look.&lt;/p&gt;

&lt;p&gt;Different ANN strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tree-based structures.&lt;/li&gt;
&lt;li&gt;Inverted file indexes ( IVF )&lt;/li&gt;
&lt;li&gt;Product quantization ( PQ )&lt;/li&gt;
&lt;li&gt;Graph-based indexes like HNSW&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HNSW is the rockstar of the bunch. Let's meet it.&lt;/p&gt;

&lt;h2&gt;
  
  
  HNSW: Navigating a Graph Instead of Scanning Everything
&lt;/h2&gt;

&lt;p&gt;HNSW = Hierarchical Navigable Small World.&lt;/p&gt;

&lt;p&gt;Sounds like a prog-rock album title. The idea is actually pretty intuitive.&lt;br&gt;
Instead of storing vectors as a boring list, HNSW organizes them into a graph. Each vector connects to its nearby neighbors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      ●────●────●
     / \      \
    ●   ●──────●
     \  |
      ●─●────●
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Searching becomes a navigation problem instead of a brute-force slog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple Layers: From Zoomed-Out to Zoomed-In
&lt;/h2&gt;

&lt;p&gt;HNSW gets even fancier by stacking the graph into multiple layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔝 Layer 3 (Sparse, zoomed-out view)

       ●
        \
         ●

──────────────────

🥈 Layer 2 (Medium detail)

   ●────●────●

──────────────────

🥇 Layer 1 (Dense, zoomed-in detail)

●─●─●─●─●─●─●─●
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Top layers: Fewer nodes, coarse overview&lt;/li&gt;
&lt;li&gt;Bottom layers: Denser, more detailed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Search Dance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Start at the sparse top layer&lt;/li&gt;
&lt;li&gt;Jump toward the region closest to your query&lt;/li&gt;
&lt;li&gt;Move down one layer&lt;/li&gt;
&lt;li&gt;Refine the search&lt;/li&gt;
&lt;li&gt;Repeat until you hit the bottom&lt;/li&gt;
&lt;li&gt;Return the nearest vectors found&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of comparing against millions of vectors, the algorithm follows a relatively small number of graph edges to reach the right neighborhood. Way fewer distance computations = way faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why HNSW Is So Fast
&lt;/h2&gt;

&lt;p&gt;Brute force? O(N) - work grows with every vector you add.&lt;br&gt;
HNSW? More like O(log N) - work grows much, much slower.&lt;/p&gt;

&lt;p&gt;For millions of vectors, this the different between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Millions of comparisons -&amp;gt; seconds&lt;/li&gt;
&lt;li&gt;Hundreds of comparisons -&amp;gt; milliseconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why HNSW is the default in pretty much every modern vector database worth its salt.&lt;/p&gt;
&lt;h2&gt;
  
  
  Putting It All Together: The Full Journey
&lt;/h2&gt;

&lt;p&gt;Here's what actually happens when you ask a question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❓ Question

    ↓

🧮 Embedding Model

    ↓

📍 Query Vector

    ↓

🕸️ HNSW Graph Traversal

    ↓

🔍 Approximate Nearest Neighbors

    ↓

📐 Cosine Similarity Ranking

    ↓

🏆 Top-K Chunks

    ↓

📝 Prompt Construction

    ↓

🤖 LLM

    ↓

💬 Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice: the LLM doesn't search your data directly. Almost all the heavy lifting happens before the LLM is even invited to the party.&lt;/p&gt;

&lt;p&gt;The quality of your retrieval often matters more than using a bigger, fancier language model. A great retriever with a decent LLM beats a bad retriever with GPT-5&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Setting up your WordPress development environment in Docker</title>
      <dc:creator>Prappo</dc:creator>
      <pubDate>Thu, 14 Oct 2021 11:55:10 +0000</pubDate>
      <link>https://dev.to/prappo/setting-up-your-wordpress-development-environment-in-docker-4oc9</link>
      <guid>https://dev.to/prappo/setting-up-your-wordpress-development-environment-in-docker-4oc9</guid>
      <description>&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Assuming you already know how to use docker and basics of WordPress theme and plugin developments. &lt;br&gt;
If you already don't know much you can check the following links.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.docker.com/get-started/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; and &lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Docker Compose&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.wordpress.org/plugins/intro/" rel="noopener noreferrer"&gt;Introduction to Plugin Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codex.wordpress.org/Theme_Development" rel="noopener noreferrer"&gt;Theme Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Goals
&lt;/h2&gt;

&lt;p&gt;This is good practice not to touch WordPress core. All of our works will based on &lt;strong&gt;themes&lt;/strong&gt; and &lt;strong&gt;plugins&lt;/strong&gt; folders. So we will make a system where &lt;strong&gt;themes&lt;/strong&gt; and &lt;strong&gt;plugins&lt;/strong&gt; folders are accessible from out side of container so that if we change the plugin or theme code then the effect will be applied immediately on development site.&lt;/p&gt;
&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Let's create &lt;code&gt;docker-compose.yml&lt;/code&gt; file in our development folder.&lt;/li&gt;
&lt;li&gt;Define the services.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;docker-compose up&lt;/code&gt; command to up and running our development environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Creating docker-compose.yml and defining services
&lt;/h3&gt;

&lt;p&gt;For our development process we need three services container&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database ( MySQL )&lt;/li&gt;
&lt;li&gt;WordPress&lt;/li&gt;
&lt;li&gt;phpmyadmin ( database browser )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;phpmyadmin&lt;/code&gt; is optional we are using this if we need to browse the data for development purpose. You can skip it if you want.&lt;/p&gt;

&lt;p&gt;Let's see how we can define these services. &lt;br&gt;
Edit the `docker-compose.yml' file and follow the steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the docker compose version at the very top like this &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;version: "3.3"&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define database container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6thzhzpg6yd239otcel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6thzhzpg6yd239otcel.png" alt="image" width="800" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define WordPress container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhlx7g1kak4g3ty09q6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhlx7g1kak4g3ty09q6u.png" alt="image" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define Phpmyadmin container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuybg275m344mggcfnptx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuybg275m344mggcfnptx.png" alt="image" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Full docker-compose.yml code
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


</description>
      <category>wordpress</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
