How to Install Docker on Ubuntu (24.04 and Newer)
Install Docker Engine and the Compose plugin on Ubuntu from the official repository, run Docker without sudo, and verify, update or remove it.
Blog
Docker, Kubernetes, CI/CD, Git and automation for deploying and running software on servers.
Install Docker Engine and the Compose plugin on Ubuntu from the official repository, run Docker without sudo, and verify, update or remove it.
Version software with Git tags: lightweight vs annotated, semantic versioning, pushing and deleting tags, signed tags, changelogs, tag-based deploys.
Run Traefik v3 as a Docker reverse proxy: Let's Encrypt certificates, routing containers with labels, HTTPS redirects, middlewares, dashboard.
Learn Helm: install the CLI, add repositories, install charts with custom values, upgrade and roll back releases, and create your own chart.
Understand Docker volumes, bind mounts and tmpfs: create and inspect volumes, use them in Compose, fix permissions, back up and restore, and clean up safely.
Persistent storage in Kubernetes: PVs, PVCs and StorageClasses, access modes, local-path and Longhorn on VPS clusters, StatefulSets, reclaim policy, backups.
Manage GitHub Actions secrets: repository, environment and org secrets, using them in workflows, protected environments, deploy keys, OIDC, leak prevention.
Install Podman, run a rootless container, configure registries, use it with Compose, start containers at boot with Quadlet and fix common errors.
Write a Dockerfile from scratch: instructions explained, layer caching, multi-stage builds, non-root users, .dockerignore and common mistakes to avoid.
Keep secrets in an Ansible repo safely: encrypted files and single values, the vault/vars pattern, password files and vault IDs, no_log, CI use, and rotation.
A practical DevOps roadmap for teams of 1–10 on VPS servers: Git, CI/CD, infrastructure as code, containers, monitoring, backups, security, in order of value.
Build and push Docker images with GitLab CI: the built-in registry, Docker-in-Docker, socket binding, rootless Kaniko or Buildah, caching, tags, and deploys.
Write effective .gitignore files: pattern syntax, negation, global ignores, templates for web projects, untracking committed files, and keeping secrets out.
Expose Kubernetes services with an Ingress: ingress-nginx via Helm, host and path rules, VPS clusters without a load balancer, TLS, annotations, Gateway API.
Fix Docker Hub "toomanyrequests" errors: check remaining pulls, authenticate with tokens, pull less, run a pull-through cache, and use other registries.
Move /var/lib/docker to a bigger disk: why it grows, prune first, set data-root in daemon.json, copy data with rsync, verify, roll back, bind mounts.
Observability for small teams: metrics, logs and traces, golden signals, a self-hosted Prometheus, Grafana, Loki and Tempo stack, and what to measure first.
Blue-green deployments on a VPS: two app versions, health checks, switching Nginx upstreams atomically, safe database migrations and rollback.
The 12-factor methodology in practice: config in the environment, backing services, build/release/run, stateless processes, logs as streams, applied on a VPS.
Run apps on Kubernetes: Deployments and pods, rolling updates and rollbacks, readiness and liveness probes, resources, and ClusterIP, NodePort, LoadBalancer.
Compare Git branching models: trunk-based development, GitHub Flow, GitFlow and release branches, with naming, branch protection, CI, and deployments.
Monorepo vs polyrepo: atomic changes, code sharing, CI complexity, access control, deploy independence, tooling like Nx and Turborepo, small teams.
Build a Kubernetes cluster on Ubuntu VPS nodes with kubeadm: containerd, kernel settings, control plane, Calico networking and joining workers.
Autoscale Kubernetes deployments with the HPA: metrics-server, resource requests, CPU targets, scaling behaviour, load testing, KEDA, and VPS cluster limits.