<?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: Ahmed</title>
    <description>The latest articles on DEV Community by Ahmed (@medon).</description>
    <link>https://dev.to/medon</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%2F3169868%2F880f4b3a-f01f-4f07-a5e6-42a8fe495ae6.png</url>
      <title>DEV Community: Ahmed</title>
      <link>https://dev.to/medon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/medon"/>
    <language>en</language>
    <item>
      <title>Using Docker for Local Development with Node.js, MongoDB, and Mongo Express</title>
      <dc:creator>Ahmed</dc:creator>
      <pubDate>Wed, 21 May 2025 11:55:00 +0000</pubDate>
      <link>https://dev.to/medon/using-docker-for-local-development-with-nodejs-mongodb-and-mongo-express-5eb1</link>
      <guid>https://dev.to/medon/using-docker-for-local-development-with-nodejs-mongodb-and-mongo-express-5eb1</guid>
      <description>&lt;p&gt;Hi, I’m Ahmed Salau, a DevOps enthusiast passionate about cloud and automation. In this project, I containerized an application using Docker, connecting a Node.js backend to a MongoDB database, and adding Mongo Express as a UI to manage the database, all running locally using Docker.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Why Docker?&lt;/strong&gt;&lt;br&gt;
Managing services like Node.js, MongoDB, and admin tools locally can become messy fast. Docker helps isolate and run everything in lightweight containers, making setup, testing, and teardown much easier.&lt;/p&gt;

&lt;p&gt;🧰 &lt;strong&gt;Tech Stack&lt;/strong&gt;&lt;br&gt;
Docker – For containerization and orchestration&lt;br&gt;
Node.js – Backend application&lt;br&gt;
MongoDB – NoSQL database&lt;br&gt;
Mongo Express – Web-based MongoDB UI&lt;br&gt;
HTML, JavaScript - Frontend &lt;/p&gt;

&lt;p&gt;project-root/&lt;br&gt;
│&lt;br&gt;
├── images/&lt;br&gt;
│   └── profile-1.jpg&lt;br&gt;
├── index.html&lt;br&gt;
├── serverlocal.js&lt;br&gt;
└── README.md&lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;Setup Process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull Required Docker Images&lt;/strong&gt;&lt;br&gt;
Before running containers, Docker must download the necessary images from Docker Hub. Example: I used the following commands to pull the images I needed manually&lt;br&gt;
&lt;code&gt;docker pull mongo&lt;br&gt;
docker pull mongo-express&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Docker will also pull these images automatically the first time you run the containers, but it's good practice to be explicit when setting things up. Visit - &lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Step 1: Create a Custom Docker Network&lt;/strong&gt;&lt;br&gt;
This network allows all containers to communicate by name instead of IP.&lt;br&gt;
&lt;code&gt;--network mongo-network&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you create a network: Containers communicate by name, easier to manage and more reliable.&lt;/p&gt;

&lt;p&gt;Note: By default, when you run Docker containers, Docker automatically connects them to a default network called bridge. On this network, containers can communicate with each other only by IP address, which can be inconvenient and less reliable because container IPs can change.&lt;/p&gt;

&lt;p&gt;If you don’t create a custom network and just run the containers, they are still technically “networked,” so your Mongo Express container can reach MongoDB by IP, but you’d have to manage IP addresses manually, which is cumbersome.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Step 2: Start MongoDB in a Container&lt;/strong&gt;&lt;br&gt;
This creates a MongoDB container and connects it to the custom network.&lt;br&gt;
&lt;code&gt;docker run -d \&lt;br&gt;
  --network mongo-network \&lt;br&gt;
  -p 27017:27017 \&lt;br&gt;
  -e MONGO_INITDB_ROOT_USERNAME=admin \&lt;br&gt;
  -e MONGO_INITDB_ROOT_PASSWORD=password \&lt;br&gt;
  --name mongodb \&lt;br&gt;
  mongo&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
🔹 &lt;strong&gt;Step 3: Deploy Mongo Express for UI Access&lt;/strong&gt;&lt;br&gt;
Mongo Express provides a web-based interface to interact with the MongoDB container.&lt;br&gt;
&lt;code&gt;docker run -d \&lt;br&gt;
  --name mongo-express \&lt;br&gt;
  --network mongo-network \&lt;br&gt;
  -p 8081:8081 \&lt;br&gt;
  -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \&lt;br&gt;
  -e ME_CONFIG_MONGODB_ADMINPASSWORD=password \&lt;br&gt;
  -e ME_CONFIG_MONGODB_SERVER=mongodb \&lt;br&gt;
  mongo-express&lt;br&gt;
&lt;/code&gt;You can now access Mongo Express at:👉 &lt;a href="http://localhost:8081" rel="noopener noreferrer"&gt;http://localhost:8081&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F40als6vw7o54c7bb5tds.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%2F40als6vw7o54c7bb5tds.png" alt="Mongo Express" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Step 4: Run the Node.js Backend Locally&lt;/strong&gt;&lt;br&gt;
Once your MongoDB and Mongo Express containers are running, start your backend app: &lt;code&gt;node server.js&lt;/code&gt;&lt;br&gt;
The app should now be running on: 👉 &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Flde07p7d1kxfkijdkm35.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%2Flde07p7d1kxfkijdkm35.png" alt="Node" width="706" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Key Learnings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Networks make container communication seamless.&lt;/li&gt;
&lt;li&gt;Mongo Express simplifies database management during development.&lt;/li&gt;
&lt;li&gt;Dockerizing the database layer avoids local setup conflicts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is easily scalable and mirrors production environments.&lt;br&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%2Fvuevrg0163qi9gpnas0a.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%2Fvuevrg0163qi9gpnas0a.png" alt="Database" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This project highlights the value of using Docker in backend development. By containerizing your database and admin tools, you isolate concerns and streamline your workflow. Whether you're learning DevOps or building robust systems, this approach offers clarity and control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading!&lt;/strong&gt;&lt;br&gt;
I'm happy to answer any questions you may have — just ask!. &lt;br&gt;
Follow my journey as I continue exploring DevOps, cloud-native development, and containerization tools.&lt;br&gt;
Let’s connect and grow together! 🚀&lt;/p&gt;

&lt;p&gt;🎥 &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
