<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker-Compose on AI VOID</title><link>https://ai-blog.noorshomelab.dev/tags/docker-compose/</link><description>Recent content in Docker-Compose on AI VOID</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 22 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ai-blog.noorshomelab.dev/tags/docker-compose/index.xml" rel="self" type="application/rss+xml"/><item><title>Chapter 2: Containerizing with Docker &amp;amp; Docker Compose</title><link>https://ai-blog.noorshomelab.dev/scalable-nodejs-api-platform/02-docker-setup/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/scalable-nodejs-api-platform/02-docker-setup/</guid><description>&lt;h2 id="chapter-2-containerizing-with-docker--docker-compose"&gt;Chapter 2: Containerizing with Docker &amp;amp; Docker Compose&lt;/h2&gt;
&lt;h3 id="chapter-introduction"&gt;Chapter Introduction&lt;/h3&gt;
&lt;p&gt;Welcome to Chapter 2 of our Node.js backend journey! In this chapter, we&amp;rsquo;ll take a fundamental leap towards building production-ready applications by containerizing our Node.js service using Docker and orchestrating its local development environment with Docker Compose. This step is crucial for ensuring consistency across development, testing, and production environments, eliminating the dreaded &amp;ldquo;it works on my machine&amp;rdquo; syndrome.&lt;/p&gt;
&lt;p&gt;We will start by creating a simple Fastify application, then define a &lt;code&gt;Dockerfile&lt;/code&gt; to package it into a lightweight, isolated container image. Following this, we&amp;rsquo;ll introduce &lt;code&gt;docker-compose.yml&lt;/code&gt; to define and run multi-container Docker applications, setting the stage for integrating databases and other services in future chapters. By the end of this chapter, you&amp;rsquo;ll have your Node.js application running reliably inside Docker containers, ready for scalable deployment.&lt;/p&gt;</description></item><item><title>Orchestrating Services with Docker Compose</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/orchestrating-services-docker-compose/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/orchestrating-services-docker-compose/</guid><description>&lt;h2 id="orchestrating-services-with-docker-compose"&gt;Orchestrating Services with Docker Compose&lt;/h2&gt;
&lt;p&gt;Modern applications rarely consist of a single, monolithic service. Instead, they are typically composed of multiple interconnected components: a web frontend, a backend API, a database, perhaps a caching layer, and other auxiliary services. Manually managing the lifecycle, networking, and configuration of these interconnected containers can quickly become complex, time-consuming, and prone to error.&lt;/p&gt;
&lt;p&gt;This chapter introduces Docker Compose, a powerful command-line tool designed to simplify the definition and management of multi-container Docker applications. By using a single YAML file, you can declaratively define your entire application stack, ensuring consistency and reproducibility across development, testing, and even production environments.&lt;/p&gt;</description></item><item><title>Integrating a Database Service (PostgreSQL)</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/integrating-database-service/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/integrating-database-service/</guid><description>&lt;p&gt;Modern applications demand robust data storage. In this chapter, we&amp;rsquo;ll integrate a PostgreSQL database into our Docker Compose stack, transforming our simple web application into a dynamic system capable of storing and retrieving information persistently. By the end, you&amp;rsquo;ll have a fully containerized, multi-service application with a reliable database backend, a cornerstone for any production system.&lt;/p&gt;
&lt;h3 id="project-overview-adding-persistent-data"&gt;Project Overview: Adding Persistent Data&lt;/h3&gt;
&lt;p&gt;Our overall project aims to build a production-ready multi-service application using Docker Compose. Until now, our web application has been stateless. This chapter introduces a stateful component: a PostgreSQL database. This allows our application to manage user accounts, store content, or maintain any dynamic state required for its functionality. We will focus on ensuring the database&amp;rsquo;s data persists across container restarts and updates, a critical aspect for production environments.&lt;/p&gt;</description></item><item><title>Establishing Secure Inter-Service Networking</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/establishing-secure-inter-service-networking/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/establishing-secure-inter-service-networking/</guid><description>&lt;p&gt;In a multi-service application, the way your components communicate is as critical as what they do. This chapter focuses on establishing secure and isolated networking for our Docker Compose stack. We&amp;rsquo;ll move beyond Docker&amp;rsquo;s default networking to create a dedicated network for our services, enhancing both security and clarity.&lt;/p&gt;
&lt;p&gt;By the end of this milestone, our web application and database will communicate over a private, isolated network managed by Docker Compose. This ensures that only authorized services within our stack can reach each other, laying a robust foundation for a production-ready deployment.&lt;/p&gt;</description></item><item><title>Orchestrating Harmony - Multi-Container Apps with Docker Compose</title><link>https://ai-blog.noorshomelab.dev/docker-mastery-2025/chapter-07-docker-compose/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-mastery-2025/chapter-07-docker-compose/</guid><description>&lt;h2 id="orchestrating-harmony---multi-container-apps-with-docker-compose"&gt;Orchestrating Harmony - Multi-Container Apps with Docker Compose&lt;/h2&gt;
&lt;p&gt;Welcome back, intrepid container explorer! So far, we&amp;rsquo;ve mastered the art of running single containers, crafting custom images, and managing persistent data. You&amp;rsquo;re practically a Docker wizard! But what if your application isn&amp;rsquo;t just one lonely container? What if it needs a database, a backend API, a frontend, and maybe a caching service, all working together in perfect sync? Trying to manage all those &lt;code&gt;docker run&lt;/code&gt; commands manually would be like trying to conduct an orchestra by shouting instructions at each musician individually — chaotic and prone to error!&lt;/p&gt;</description></item><item><title>Handling Configuration and Secrets Securely</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/handling-configuration-secrets-securely/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/handling-configuration-secrets-securely/</guid><description>&lt;p&gt;Managing application configuration and sensitive data is a critical aspect of building production-ready applications. Hardcoding API keys, database credentials, or other environment-specific settings directly into your code or Dockerfiles is a significant security risk and a maintenance nightmare. In this chapter, we&amp;rsquo;ll learn how to separate configuration from code and handle sensitive information (secrets) securely within our Docker Compose stack.&lt;/p&gt;
&lt;p&gt;By the end of this milestone, your multi-service application will properly load non-sensitive configuration from &lt;code&gt;.env&lt;/code&gt; files and securely consume sensitive secrets using Docker&amp;rsquo;s built-in secrets management. This significantly improves the security posture and maintainability of your deployment.&lt;/p&gt;</description></item><item><title>Implementing Health Checks for Service Robustness</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/implementing-health-checks-service-robustness/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/implementing-health-checks-service-robustness/</guid><description>&lt;h2 id="introduction-building-resilient-services-with-health-checks"&gt;Introduction: Building Resilient Services with Health Checks&lt;/h2&gt;
&lt;p&gt;In any production environment, applications are subject to transient failures, unresponsiveness, or unexpected crashes. Simply confirming a container is &amp;ldquo;running&amp;rdquo; isn&amp;rsquo;t sufficient; we need to know if the application &lt;em&gt;inside&lt;/em&gt; that container is truly healthy, responsive, and ready to serve traffic. This chapter focuses on implementing &lt;strong&gt;health checks&lt;/strong&gt; for your Docker Compose services, a cornerstone practice for building robust, self-healing, and reliable applications.&lt;/p&gt;</description></item><item><title>9. Advanced Networking and Container Linking</title><link>https://ai-blog.noorshomelab.dev/testcontainers-mastery-2026/09-advanced-networking-container-linking/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/testcontainers-mastery-2026/09-advanced-networking-container-linking/</guid><description>&lt;h2 id="9-advanced-networking-and-container-linking"&gt;9. Advanced Networking and Container Linking&lt;/h2&gt;
&lt;p&gt;Welcome back, intrepid testers! In our previous chapters, you mastered the art of spinning up individual containers for your integration tests. You learned how to get a database running, connect to it, and ensure your application logic works against a real dependency. That&amp;rsquo;s a huge leap from relying on fragile mocks!&lt;/p&gt;
&lt;p&gt;But what happens when your application isn&amp;rsquo;t just talking to &lt;em&gt;one&lt;/em&gt; database? What if it&amp;rsquo;s a microservice interacting with another microservice, a message broker, &lt;em&gt;and&lt;/em&gt; a database? In the real world, applications often live in a complex ecosystem of services, all needing to communicate with each other. Testing such interconnected systems requires more than just isolated containers.&lt;/p&gt;</description></item><item><title>Securing Containers with Non-Root Users and Resource Limits</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/securing-containers-non-root-users-resource-limits/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/securing-containers-non-root-users-resource-limits/</guid><description>&lt;p&gt;Running applications in production demands not just functionality but also robust security and stable performance. A common oversight in container deployments is operating services with excessive privileges or without proper resource constraints. This can turn a minor vulnerability into a critical system compromise or a simple traffic spike into a cascading outage.&lt;/p&gt;
&lt;p&gt;In this chapter, we&amp;rsquo;ll implement two fundamental production best practices for Docker containers: running services as non-root users and defining explicit CPU and memory limits. These measures significantly reduce your application&amp;rsquo;s attack surface and ensure predictable resource consumption, making your multi-service stack more resilient.&lt;/p&gt;</description></item><item><title>Auditing Docker Host and Containers with docker-bench-security</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/auditing-docker-host-containers-docker-bench-security/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/auditing-docker-host-containers-docker-bench-security/</guid><description>&lt;p&gt;Securing your containerized applications isn&amp;rsquo;t just about writing secure code; it&amp;rsquo;s also about ensuring the underlying Docker host and its runtime environment are configured securely. In this chapter, we&amp;rsquo;ll shift our focus to proactive security by auditing our Docker setup using &lt;code&gt;docker-bench-security&lt;/code&gt;. This tool helps validate your Docker installation against the best practices outlined in the CIS Docker Benchmark.&lt;/p&gt;
&lt;p&gt;By the end of this chapter, you&amp;rsquo;ll be able to run a comprehensive security audit on your Docker environment, understand its findings, and begin to implement the necessary remediations. This is a critical step in hardening your production deployments and maintaining a strong security posture.&lt;/p&gt;</description></item><item><title>Finalizing the Production Stack and Deployment Considerations</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/finalizing-production-stack-deployment-considerations/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/finalizing-production-stack-deployment-considerations/</guid><description>&lt;h2 id="finalizing-the-production-stack-and-deployment-considerations"&gt;Finalizing the Production Stack and Deployment Considerations&lt;/h2&gt;
&lt;p&gt;Welcome to the final chapter of our Docker Compose journey! So far, we&amp;rsquo;ve built a multi-service application, managed data, handled secrets, and implemented health checks. These are crucial steps, but moving from a development setup to a production-ready system requires a deeper look into operational hardening.&lt;/p&gt;
&lt;p&gt;In this chapter, we will refine our Docker Compose stack to meet production standards. This involves configuring resource limits, enhancing logging, and performing security audits. By the end, you&amp;rsquo;ll have a more robust and observable application stack, ready for real-world deployment considerations. We&amp;rsquo;ll also discuss the boundaries of Docker Compose and where dedicated orchestration tools become necessary.&lt;/p&gt;</description></item><item><title>Build a Production Docker Stack Guide</title><link>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/docker-compose-prod-stack-2026/</guid><description>&lt;p&gt;Welcome to this comprehensive guide on designing and building a production-ready Docker stack. Across 13 detailed steps, you will learn essential best practices for deploying, scaling, and securing modern applications using Docker Compose. Prepare to transform your development setup into a robust, production-grade environment.&lt;/p&gt;</description></item><item><title>Building a Production-Ready Docker Compose Stack</title><link>https://ai-blog.noorshomelab.dev/projects/docker-compose-production-stack-guide/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/projects/docker-compose-production-stack-guide/</guid><description>&lt;p&gt;Deploying modern applications effectively requires more than just running code; it demands a robust, secure, and maintainable infrastructure. This guide will walk you through building a multi-service web application stack using Docker and Docker Compose, applying production-minded practices every step of the way.&lt;/p&gt;
&lt;h3 id="why-build-a-production-ready-docker-stack"&gt;Why Build a Production-Ready Docker Stack?&lt;/h3&gt;
&lt;p&gt;Production readiness isn&amp;rsquo;t just about functionality; it&amp;rsquo;s about reliability, security, maintainability, and efficiency. In today&amp;rsquo;s cloud-native landscape, containerization with Docker has become a cornerstone for achieving these goals. However, simply containerizing an application isn&amp;rsquo;t enough. You need to understand how to:&lt;/p&gt;</description></item><item><title>Self-Host Immich on an Old Android Pixel Phone</title><link>https://ai-blog.noorshomelab.dev/homelab/self-host-immich-android-pixel-termux/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/homelab/self-host-immich-android-pixel-termux/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What you&amp;rsquo;ll have running:&lt;/strong&gt; You will have a self-hosted Google Photos alternative (Immich) running on an old Android Pixel phone, accessible securely from your other devices.
&lt;strong&gt;Estimated time:&lt;/strong&gt; ~5 hours
&lt;strong&gt;Difficulty:&lt;/strong&gt; INTERMEDIATE
&lt;strong&gt;Power usage:&lt;/strong&gt; &lt;del&gt;5W idle (&lt;/del&gt;$5/year)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware needed:&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Old Android Pixel phone (Pixel 3 or newer recommended for better performance)&lt;/li&gt;
&lt;li&gt;USB-C charger and cable (ensure continuous power)&lt;/li&gt;
&lt;li&gt;High-speed microSD card (128GB+ recommended) or external USB-C SSD for photo storage&lt;/li&gt;
&lt;li&gt;OTG adapter (if using external USB storage and phone lacks direct USB-C host mode)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Ever looked at that old Pixel phone gathering dust in a drawer and thought, &amp;ldquo;There has to be a better use for this than a paperweight&amp;rdquo;? Well, you&amp;rsquo;re in luck. We&amp;rsquo;re going to transform it into a privacy-respecting, self-hosted Google Photos alternative using Immich, all powered by Termux and Docker Compose. This isn&amp;rsquo;t just about saving a few bucks; it&amp;rsquo;s about reclaiming ownership of your memories and learning a ton about self-hosting on unconventional hardware.&lt;/p&gt;</description></item></channel></rss>