<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>OpsAtlas blog</title><description>Practical articles on Docker, Kubernetes, networking and CI/CD, written alongside the tools on this site.</description><link>https://opsatlas.app/</link><language>en</language><item><title>Multi-Stage Docker Builds: Smaller, Safer Images</title><link>https://opsatlas.app/blog/docker-multi-stage-builds/</link><guid isPermaLink="true">https://opsatlas.app/blog/docker-multi-stage-builds/</guid><description>Build in one stage, ship from another: multi-stage Dockerfiles for Node.js and Go, BuildKit cache mounts, test stages in CI and the pitfalls.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>docker</category><category>dockerfile</category><category>multi-stage-builds</category><category>performance</category><author>OpsAtlas</author></item><item><title>Dockerfile Mistakes That Leak Secrets and Bloat Images</title><link>https://opsatlas.app/blog/dockerfile-mistakes-secrets-image-size/</link><guid isPermaLink="true">https://opsatlas.app/blog/dockerfile-mistakes-secrets-image-size/</guid><description>Six Dockerfile mistakes you can prove with docker history, inspect and top: leaked tokens, layers that never shrink, stale apt caches and slow stops.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>docker</category><category>dockerfile</category><category>security</category><category>containers</category><author>OpsAtlas</author></item><item><title>From Dockerfile to Kubernetes in Four Steps</title><link>https://opsatlas.app/blog/dockerfile-to-kubernetes/</link><guid isPermaLink="true">https://opsatlas.app/blog/dockerfile-to-kubernetes/</guid><description>Take a Node.js API from a first Dockerfile to validated Kubernetes manifests with four free OpsAtlas tools: lint, Compose, generate, validate.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>docker</category><category>dockerfile</category><category>docker-compose</category><author>OpsAtlas</author></item><item><title>Your First Kubernetes Deployment and Service</title><link>https://opsatlas.app/blog/first-kubernetes-deployment-and-service/</link><guid isPermaLink="true">https://opsatlas.app/blog/first-kubernetes-deployment-and-service/</guid><description>Run a container on a local Kubernetes cluster: generate a Deployment and Service, check them, apply them and watch Kubernetes keep the app running.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>deployment</category><category>kind</category><category>containers</category><author>OpsAtlas</author></item><item><title>A Local Dev Stack with Docker Compose</title><link>https://opsatlas.app/blog/local-dev-stack-docker-compose/</link><guid isPermaLink="true">https://opsatlas.app/blog/local-dev-stack-docker-compose/</guid><description>Run an API and Postgres together with one command: convert docker run to Compose, then add builds, health checks, startup order and a .env file.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>docker</category><category>docker-compose</category><category>postgres</category><category>containers</category><author>OpsAtlas</author></item><item><title>Pin Docker Base Images by Digest and Keep Them Updated</title><link>https://opsatlas.app/blog/pin-docker-base-images-digest/</link><guid isPermaLink="true">https://opsatlas.app/blog/pin-docker-base-images-digest/</guid><description>Why node:22 can change under you, how to pin FROM lines to an immutable digest, and how Renovate or Dependabot keep pinned images patched.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>docker</category><category>dockerfile</category><category>supply-chain</category><category>renovate</category><author>OpsAtlas</author></item><item><title>Write Your First Dockerfile</title><link>https://opsatlas.app/blog/write-your-first-dockerfile/</link><guid isPermaLink="true">https://opsatlas.app/blog/write-your-first-dockerfile/</guid><description>Build a container image for a small Node.js API line by line, run it, then lint it and fix it to a perfect score. No Docker experience needed.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>docker</category><category>dockerfile</category><category>containers</category><category>nodejs</category><author>OpsAtlas</author></item><item><title>Debugging 401 Unauthorized With JWTs: 7 Causes</title><link>https://opsatlas.app/blog/debug-jwt-401-unauthorized/</link><guid isPermaLink="true">https://opsatlas.app/blog/debug-jwt-401-unauthorized/</guid><description>A valid-looking token, a 401 response. Seven common causes, from expiry and clock skew to the wrong audience and rotated keys, and how to check each.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>jwt</category><category>security</category><category>authentication</category><category>troubleshooting</category><author>OpsAtlas</author></item><item><title>Debugging a Kubernetes 503: From Ingress to Pod</title><link>https://opsatlas.app/blog/debug-kubernetes-ingress-503/</link><guid isPermaLink="true">https://opsatlas.app/blog/debug-kubernetes-ingress-503/</guid><description>Trace a 503 or 502 from a Kubernetes Ingress through the Service and its endpoints to the pod, with the kubectl command to check each hop.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>ingress</category><category>networking</category><category>troubleshooting</category><author>OpsAtlas</author></item><item><title>GitHub Actions Matrix Jobs and Required Status Checks</title><link>https://opsatlas.app/blog/github-actions-matrix-required-checks/</link><guid isPermaLink="true">https://opsatlas.app/blog/github-actions-matrix-required-checks/</guid><description>Why a GitHub Actions matrix leaves pull requests stuck on &quot;Expected — Waiting&quot;, how to make matrix jobs safe to require, and how to keep PR matrices small.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>github-actions</category><category>ci-cd</category><category>branch-protection</category><author>OpsAtlas</author></item><item><title>Kubernetes CronJobs: Time Zones, Missed Runs, Overlaps</title><link>https://opsatlas.app/blog/kubernetes-cronjob-pitfalls/</link><guid isPermaLink="true">https://opsatlas.app/blog/kubernetes-cronjob-pitfalls/</guid><description>Why a Kubernetes CronJob runs at the wrong hour, runs twice, or stops running, and the CronJob settings that make scheduled jobs predictable.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>cron</category><category>scheduling</category><category>batch-jobs</category><author>OpsAtlas</author></item><item><title>Kubernetes Probes Without the Outages</title><link>https://opsatlas.app/blog/kubernetes-readiness-liveness-probes/</link><guid isPermaLink="true">https://opsatlas.app/blog/kubernetes-readiness-liveness-probes/</guid><description>How readiness, liveness and startup probes differ, the probe mistakes that turn a slow database into a full outage, and safe settings to start from.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>reliability</category><category>health-checks</category><author>OpsAtlas</author></item><item><title>Planning Kubernetes Node, Pod and Service CIDRs</title><link>https://opsatlas.app/blog/plan-kubernetes-pod-service-cidr/</link><guid isPermaLink="true">https://opsatlas.app/blog/plan-kubernetes-pod-service-cidr/</guid><description>How to size the three IP ranges every Kubernetes cluster needs, why pod CIDRs run out first, and how to avoid overlaps with VPCs, VPNs and Docker.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>networking</category><category>cidr</category><category>subnets</category><author>OpsAtlas</author></item><item><title>How Many Instances to Reserve: The Break-Even Method</title><link>https://opsatlas.app/blog/size-reserved-instance-commitment/</link><guid isPermaLink="true">https://opsatlas.app/blog/size-reserved-instance-commitment/</guid><description>Use hourly usage and one break-even number to decide how many instances to reserve, with a worked example of where the last commitment stops paying.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>cloud-cost</category><category>finops</category><category>aws</category><category>reserved-instances</category><author>OpsAtlas</author></item><item><title>Why Kubernetes Rejects value: yes (YAML 1.1 vs 1.2)</title><link>https://opsatlas.app/blog/yaml-1-1-vs-1-2-kubernetes-gotchas/</link><guid isPermaLink="true">https://opsatlas.app/blog/yaml-1-1-vs-1-2-kubernetes-gotchas/</guid><description>The same YAML file can mean different things to different parsers. How the 1.1 vs 1.2 split breaks Kubernetes, Compose and CI files, and how to spot it.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>yaml</category><category>kubernetes</category><category>json</category><author>OpsAtlas</author></item><item><title>Migrating from docker run to Docker Compose</title><link>https://opsatlas.app/blog/migrate-docker-run-to-docker-compose/</link><guid isPermaLink="true">https://opsatlas.app/blog/migrate-docker-run-to-docker-compose/</guid><description>A practical, step-by-step guide to turning a pile of docker run commands into one compose.yaml, and the five mistakes to fix along the way.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>docker</category><category>docker-compose</category><category>containers</category><author>OpsAtlas</author></item></channel></rss>