Learn DevOps. Build stuff. Have fun. 🤪
Hi, I'm Tom. When I'm not eating egg sandwiches, I'm on a mission to help you be awesome with Kubernetes, DevOps and containers.

Join my list and get new articles emailed to you every month:
Or, browse all tutorials below ↓
Docker, Podman and Containers
- The differences between Docker, containerd, CRI-O and runc
- 14 best practices for containerising your Java applications
- How do Docker containers communicate with each other?
- Rootless container/host networking in Podman, without the hassle
- Managing your Podman containers with Cockpit on Fedora
- Using volumes with rootless podman, explained
- Containers: one single process, or multiple processes?
- What are containers used for?
- Why did my Docker container stop?
- SSH into a Docker container? Use docker exec instead
- A Typical Docker Development Workflow, Explained
DevOps Engineering
- The 7 essential stages of a CI/CD pipeline
- Get your branches right: Git branching for microservices
- Ansible Tips: How to Use a Loop to Render Multiple Templates
- Build a Java container CI/CD pipeline with Concourse
- Get your metrics on: How to measure DevOps success
- An Introduction to DevOps (for the Curious)
Kubernetes & OpenShift
- How to Create a Cluster Admin User in OpenShift, the Easy Way
- How to Deploy a Node.js app on OpenShift
- How to Deploy a React app to OpenShift
- How to Deploy a Web Server on OpenShift
- Kubernetes Deployment spec examples
- How to Build an Image from a Dockerfile in OpenShift
- Developing with Kubernetes on Fedora
- Helm: A cheat sheet
- Kubernetes ImagePullBackOff error: what you need to know
- Image Streams in OpenShift: What You Need to Know
- OpenShift Container Platform