LinkedIn Series ยท Build in public
Understanding
DevOps
64 posts total
1 post every 2 days
6 phases
progress
0
/
64
posted
concept
build
break & fix
Phase 1
Docker - foundations
2 posts
P01
Docker - the mental model
The apartment complex analogy. Containers, docker ps, docker run, docker exec.
concept
P02
Dockerfiles - the blueprint
FROM, WORKDIR, COPY, RUN, CMD. Why reproducibility matters.
concept
Phase 1 cont.
Docker - going deeper
6 posts
P03
Images vs containers - clearing the confusion
The blueprint is not the apartment. One image โ many containers. Image layers explained simply.
concept
P04
Volumes - why containers forget
Ephemeral containers, the persistent data problem. Bind mounts vs named volumes.
concept
P05
Dockerfiles deep - the confusing pairs
CMD vs ENTRYPOINT, COPY vs ADD, ENV vs ARG, EXPOSE. The stuff Post 2 didn't cover ๐
concept
P06
Dockerfiles advanced - caching & multi-stage builds
Layer caching, why build order matters, multi-stage builds, .dockerignore. Keeping images lean.
concept
P07
Build something real - containerise a Node.js app
Write a simple API, write the Dockerfile, build the image, run it. End-to-end from zero.
build
P08
Break it & fix it - Docker debugging
Port conflicts, missing env vars, container exits immediately, can't connect to DB. Live diagnosis.
break & fix
Phase 1 cont.
Docker networking
4 posts
P09
Docker networking - how containers talk
Bridge, host, and none. What actually happens on the network when a container starts.
concept
P10
Container DNS - how services find each other by name
Why you use the service name not localhost. How Docker's internal DNS actually works.
concept
P11
Network isolation - separating containers by design
Why you'd put your DB on a separate network from your API. Security through isolation.
concept
P12
Break it & fix it - networking edition
Can't reach the other container, wrong network, exposed vs published ports confusion.
break & fix
Phase 1 cont.
Docker Compose
5 posts
P13
Docker Compose - the building manager
docker-compose.yml walkthrough. Spinning up multiple services at once. Why it exists.
concept
P14
Compose deep - depends_on, healthchecks, restart policies
Controlling startup order properly. What depends_on actually does (and doesn't). Restart strategies.
concept
P15
Compose env vars, secrets & override files
Managing config across environments. .env files, secrets, docker-compose.override.yml.
concept
P16
Full-stack Compose - Node + Postgres + Redis
Wire up three services, shared network, volumes for DB persistence. The whole thing locally.
build
P17
Break it & fix it - Compose edition
Service won't start, wrong startup order, env not loading, volume data disappearing.
break & fix
Phase 1 cont.
Docker in production
1 post
P18
Docker in production - what changes & what breaks
What you'd never do in prod. Non-root users, image scanning, resource limits, registry basics.
concept
Phase 2
Reverse proxies
6 posts
P19
Reverse proxies - the apartment receptionist
What Nginx/Caddy/Traefik actually do. Traffic routing, SSL termination, why you need one.
concept
P20
Nginx deep dive - config, location blocks, upstream
Writing real Nginx config. Location matching, proxy_pass, upstream blocks. Not just copy-paste.
concept
P21
SSL/TLS - what HTTPS actually does
Certificates, Let's Encrypt, certbot. Why HTTP is not fine for production. Ever.
concept
P22
Load balancing at the proxy level
Round robin, least connections, ip_hash. Spreading traffic before it even hits your app.
concept
P23
Set up Nginx + Docker - live demo
Nginx as a reverse proxy in front of your Node app via Compose. Real config, real domain.
build
P24
Break it & fix it - 502 bad gateway & cert issues
The most common proxy failures. Reading Nginx error logs. Debugging SSL certificate problems.
break & fix
Phase 3
CI/CD
7 posts
P25
CI/CD - why you should never deploy by hand
The pipeline metaphor. What CI does vs what CD does. The human error problem.
concept
P26
GitHub Actions deep - triggers, jobs, steps, matrix
Writing YAML workflows properly. on: push, pull_request. Matrix builds for multiple environments.
concept
P27
Docker in CI - building and pushing images
Building your image inside the pipeline. Pushing to Docker Hub or GHCR on merge to main.
concept
P28
CD - actually deploying & environment promotion
Dev โ staging โ prod. How promotion works. Approval gates. What a deploy actually triggers.
concept
P29
Secrets management in pipelines
GitHub Actions secrets, env variables in CI, what never goes in your YAML. Ever.
concept
P30
Build a full pipeline - lint, test, build, push, deploy
A complete GitHub Actions workflow from commit to production. Every stage wired up.
build
P31
Break it & fix it - pipeline edition
Secrets missing, tests fail, image won't push, deploy step times out. Reading CI logs properly.
break & fix
Phase 4
Kubernetes - core concepts
7 posts
P32
Why Kubernetes exists - what Compose can't do
Self-healing, rolling deploys, scaling. The problems K8s solves that Compose simply can't.
concept
P33
Pods, Deployments, Services - the holy trinity
Apartment complex โ city. Pods = apartments. Deployment = management company. Service = address.
concept
P34
ConfigMaps & Secrets - config in K8s
How K8s separates config from code. When to use ConfigMap vs Secret and why it matters.
concept
P35
Ingress - getting traffic in from outside
How requests reach your pods from the internet. Ingress controllers, rules, TLS termination.
concept
P36
Persistent volumes - storage that survives pod death
PV, PVC, StorageClass. How K8s handles storage differently from Docker volumes.
concept
P37
Namespaces - isolation inside a cluster
Running multiple environments on one cluster. How namespaces separate teams and workloads.
concept
P38
Deploy your app to K8s - minikube walkthrough
Write Deployment + Service YAML. Apply it. kubectl get pods. Watch it actually run.
build
Phase 4 cont.
Kubernetes - going deeper
7 posts
P39
RBAC - who can do what in your cluster
ServiceAccounts, Roles, ClusterRoles, RoleBindings. Least privilege in Kubernetes.
concept
P40
Helm - the package manager for Kubernetes
Why raw YAML doesn't scale. Charts, values, templating. Installing and writing your own chart.
concept
P41
Rolling deploys & rollbacks
How K8s updates pods without downtime. kubectl rollout. How to roll back when something breaks.
concept
P42
Resource limits & requests - don't starve your pods
CPU and memory requests vs limits. What happens when a pod goes over. OOMKilled explained.
concept
P43
Horizontal pod autoscaling - scaling with real traffic
HPA, metrics-server, target CPU utilisation. Pods spinning up automatically under load.
concept
P44
Build a production-ready K8s setup - full walkthrough
Deployment, Service, Ingress, ConfigMap, Secret, HPA. A real app. Everything wired together.
build
P45
Break it & fix it - CrashLoopBackOff, OOMKilled, ImagePullBackOff
The most common K8s errors. kubectl describe, kubectl logs, reading events.
break & fix
Phase 5
Observability - monitoring & logging
9 posts
P46
Monitoring & logging - flying blind vs with instruments
Metrics vs logs vs traces. The three pillars of observability. Why each one exists.
concept
P47
Prometheus deep - scraping, metric types, PromQL basics
Counters, gauges, histograms. How Prometheus pulls data. Writing your first PromQL query.
concept
P48
Grafana - building dashboards that actually tell you something
Panels, data sources, variables. A dashboard you'd actually open during an incident.
concept
P49
Alerting - getting paged when things break
Alertmanager, alert rules, routing. The difference between a noisy alert and a useful one.
concept
P50
Structured logging - making logs actually useful
JSON logs, log levels, correlation IDs. Why unstructured logs are a nightmare at scale.
concept
P51
Log aggregation - ELK stack or Loki
Collecting logs from many services centrally. Searching, filtering, querying at scale.
concept
P52
Distributed tracing - what logs can't tell you
Traces, spans, Jaeger/Tempo. Following a request across 5 services when something goes wrong.
concept
P53
Set up Prometheus + Grafana - watch your app live
Instrument your Node app. Scrape metrics. Build a real dashboard. Fire a real alert.
build
P54
Break it & fix it - when your monitoring is lying
Missing metrics, wrong labels, alert firing on nothing. Debugging the observability layer itself.
break & fix
Phase 6
Distributed systems - thinking at scale
10 posts
P55
Distributed systems - what changes with many machines
Why distributed is fundamentally different. The problems that only appear at scale.
concept
P56
CAP theorem - the tradeoff you can't avoid
Consistency, availability, partition tolerance. Why you can only pick two. Real examples.
concept
P57
Consistency patterns - eventual vs strong
What eventual consistency actually means in practice. When it's fine and when it absolutely isn't.
concept
P58
Message queues - why Kafka and RabbitMQ exist
Decoupling services with queues. Producers, consumers, topics. When synchronous calls break down.
concept
P59
Service discovery - how services find each other at scale
Why hardcoded IPs don't work. DNS-based discovery, service registries, K8s DNS.
concept
P60
Rate limiting & throttling - protecting your system
Token bucket, sliding window. Protecting services from being overwhelmed.
concept
P61
Fault tolerance - circuit breakers, retries, timeouts
The patterns that keep distributed systems alive when parts of them fail.
concept
P62
The fallacies of distributed computing
The 8 assumptions every developer makes that are wrong. A humbling read.
concept
P63
Chaos engineering - breaking things on purpose in prod
Why Netflix invented chaos engineering. Game days, failure injection, building confidence.
concept
P64
The full picture - where you are vs where you started
How every piece connects. Docker โ K8s โ CI/CD โ observability โ distributed. What's next.
concept