NEW POSTS EVERY WEEK

DevOps, Cloud Native
and what runs underneath.

Linux, networking, security, and cloud — studies, projects, and field notes on Docker, Kubernetes, Terraform, and system design. Hands-on learning, from fundamentals to certifications.

66 posts found
TERRAFORM↗

Terraform State File: Mapping, Dependencies, and Performance

Understand how the Terraform state connects HCL to real infrastructure, records dependencies and attributes, and how to share this state with locking in S3.

KUBERNETES↗

Readiness Probe in Kubernetes: When Running Doesn't Mean Ready

Understand how the Readiness Probe signals if a container is ready to receive traffic, and see this behavior in a demonstration with Nginx.

KUBERNETES↗

Liveness Probe in Kubernetes: Verifying and Restarting Containers

Learn to configure a TCP livenessProbe in Nginx, understand its parameters, and observe restarts and CrashLoopBackOff when testing an incorrect port.

DOCKER↗

From Local Environment to GHCR: Docker and GitHub Actions in Practice with PICKStack

How I set up PICKStack, investigated ports, variables, and routes, and adapted a pipeline to publish six images to GHCR with Cosign and SBOM.

CLOUD↗

Backups and Recovery on AWS: Snapshots, Backup, and Storage Gateway

Differentiate snapshots, AWS Backup, Storage Gateway, and Elastic Disaster Recovery for planning copies, hybrid integration, and recovery.

// Series
AWS for Cloud Practitioners12 / 12
CLOUD↗

Amazon S3: Storage Classes, Protection, and Lifecycle

Understand how to choose S3 classes and combine versioning, permissions, and lifecycle without confusing durability with availability.

// Series
AWS for the Cloud Practitioner11 / 12
CLOUD↗

EBS, S3, EFS, and FSx: Choosing Storage on AWS

Compare block, object, and file storage and understand the difference between EBS, instance store, S3, EFS, and FSx.

// Series
AWS for the Cloud Practitioner10 / 12
CLOUD↗

AWS Connectivity: VPN, Direct Connect, Route 53, and CloudFront

Differentiate private connectivity, name resolution, and global delivery using VPN, Direct Connect, PrivateLink, Route 53, CloudFront, and Global Accelerator.

// Series
AWS for the Cloud Practitioner9 / 12
CLOUD↗

VPC, Subnets, and Traffic Rules on AWS

Learn how VPC, routes, Internet Gateway, NAT Gateway, Security Groups, and Network ACLs control communication on AWS.

// Series
AWS for the Cloud Practitioner8 / 12
CLOUD↗

Provisioning on AWS: Console, CLI, CloudFormation, and Managed Services

Learn how to create AWS resources and differentiate between CloudFormation, Elastic Beanstalk, Batch, Lightsail, and Outposts.

// Series
AWS for the Cloud Practitioner7 / 12
CLOUD↗

ECR, ECS, EKS, and Fargate: Containers on AWS Without Confusion

Separate image registry, orchestration, and compute to understand when to use ECR, ECS, EKS, and Fargate on AWS.

// Series
AWS for the Cloud Practitioner6 / 12
CLOUD↗

SQS, SNS and Lambda: Queues, Notifications and Processing

Learn the difference between SQS, SNS and Lambda and see how to combine queues, event publishing, and code execution on AWS.

// Series
AWS for the Cloud Practitioner5 / 12
CLOUD↗

EC2 Auto Scaling and Load Balancer: Who Does What?

Understand vertical and horizontal scaling, the role of Auto Scaling, and how a load balancer distributes traffic among AWS instances.

// Series
AWS for the Cloud Practitioner4 / 12
CLOUD↗

EC2 Costs: On-Demand, Spot, and Usage Commitments

Compare On-Demand, Spot, Savings Plans, and Reserved Instances, and understand the difference between discount, capacity reservation, and cost control.

// Series
AWS for the Cloud Practitioner3 / 12
CLOUD↗

Amazon EC2: Instances, Types, and Lifecycle

Learn what an EC2 instance is, how to choose your instance type, and what happens to data when restarting, stopping, or terminating a server.

// Series
AWS for the Cloud Practitioner2 / 12
CLOUD↗

AWS Regions, Zones, and Shared Responsibility

Understand AWS regions, availability zones, and edge locations, and learn what responsibilities remain yours in the cloud.

// Series
AWS for the Cloud Practitioner1 / 12
TERRAFORM↗

Terraform Providers: The Bridge Between HCL and APIs

How providers connect Terraform to external services, where to find them, how to declare versions, and what happens during `terraform init`.

TERRAFORM↗

Expressions in Terraform: Values That Make HCL Dynamic

What are expressions in Terraform and how to use references, lists, maps, conditionals, and functions to avoid repeated configurations.

TERRAFORM↗

Terraform Remote Backend: State in S3

How to move the state off the local machine, configure an S3 backend, securely migrate the file, and separate environments using the key.

TERRAFORM↗

Terraform Destroy: Undoing What Was Created

The `terraform destroy` command: how it builds the removal plan, what the destruction symbol means in the output, and how to generate and apply a separate destruction plan.

TERRAFORM↗

Terraform in Practice: Init, Plan, and Apply

What `init` downloads and organizes, how to configure credentials and providers, what `plan` compares and displays in its output, and how `apply` updates the state.

TERRAFORM↗

Fundamentals of IaC: From API and Cloud to Terraform's Workflow

Notes from the LINUXtips IaC course: what an API is, what Cloud is in practice, AWS EC2/S3/IAM services, regions and availability zones, and how all this connects with Terraform's architecture, state, and workflow.

LINUX↗

Anatomy of APT repositories: sources.list, components, and PPAs

Notes on where APT downloads packages from, the four components of an Ubuntu repository (main, restricted, universe, multiverse), and precautions when adding a third-party PPA.

LINUX↗

From .exe to apt install: Understanding Package Management on Linux

Notes on what a package manager is, the difference from the Windows installation model, and how APT resolves dependencies and verifies GPG signatures before installing anything.

LINUX↗

ACLs in Linux: Access Control Beyond Owner, Group, and Others

Notes on Access Control Lists (ACLs) in Linux: how to install, read with getfacl, grant permission to a specific user or group with setfacl, and when it's truly worth it.

LINUX↗

umask, /etc/login.defs and special permissions: SUID, SGID and sticky bit

Notes on umask, the /etc/login.defs file, and special permissions SUID, SGID, and sticky bit in Linux, with practical chmod examples.

LINUX↗

Understanding Linux Permissions: chmod, chown, and sudo in Practice

Notes on Linux permissions: how to read `ls -l`, symbolic and octal chmod, `chown` to change owner and group, and how to securely configure sudo with `visudo`.

CLOUD↗

Cloud Concepts for Azure Certification. Day 1 Notes

I started studying from scratch for the foundational Azure certification. In this post, I compile my notes on consumption model, multicloud, Azure Arc, deployment models, and shared responsibility.

LINUX↗

Managing Users in Linux: passwd, shadow, useradd, and chage

Notes on user management in Linux: structure of /etc/passwd and /etc/shadow, useradd vs adduser, /etc/skel, account locking, and password expiration policy with chage.

KUBERNETES↗

Good Practices for Deployments in Kubernetes: Organizing Applications for Production

Gather all the concepts learned about Deployments and discover good practices for creating more organized, secure, and easy-to-maintain applications.

// Series
Kubernetes Deployment Fundamentals8 / 8
KUBERNETES↗

Revision History and Rollback in Kubernetes: Restoring Previous Versions of a Deployment

Learn how Kubernetes records each Deployment update, view revision history, and safely perform rollbacks.

// Series
Kubernetes Deployments Fundamentals7 / 8
KUBERNETES↗

Recreate Strategy in Kubernetes: When Tearing Down All Pods Makes Sense

Understand how the Recreate strategy works, when to use it, and its differences compared to RollingUpdate.

// Series
Fundamentals of Deployments in Kubernetes6 / 8
KUBERNETES↗

RollingUpdate in Kubernetes: Updating Applications Without Downtime

Understand how the RollingUpdate strategy works and learn to configure maxSurge and maxUnavailable to securely update applications.

// Series
Fundamentals of Deployments in Kubernetes5 / 8
KUBERNETES↗

Updating a Kubernetes Deployment: How to Apply Changes Safely

Learn how to update a Kubernetes Deployment, understand the role of `kubectl apply`, and how the cluster automatically detects and applies changes.

// Series
Fundamentals of Kubernetes Deployments4 / 8
KUBERNETES↗

Creating Deployments in Kubernetes: YAML Manifests and kubectl create

Learn the main ways to create a Deployment in Kubernetes using YAML manifests and the kubectl create command.

// Series
Fundamentals of Deployments in Kubernetes3 / 8
KUBERNETES↗

Anatomy of a Deployment: understanding selector, template, and ReplicaSet

Understand how a Deployment is structured and discover the role of selector, template, and ReplicaSet in creating and managing Pods.

// Series
Kubernetes Deployment Fundamentals2 / 8
KUBERNETES↗

Understanding Kubernetes Deployments: the resource that keeps your application always available

Understand what a Deployment is, how it works, and why it's the recommended resource for running applications in Kubernetes.

// Series
Kubernetes Deployment Fundamentals1 / 8
LINUX↗

From VM to EC2: Three Practical Linux Challenges for Cloud Native

My journey through the first three Linux for Cloud Native challenges: SSH between environments, filesystem organization, rsync, Vim, VS Code Remote SSH, and real-time logs.

KUBERNETES↗

Configuring emptyDir volumes in Kubernetes Pods

Learn how to create and mount a temporary emptyDir volume in a Kubernetes Pod, define its storage limit, and test its functionality.

// Series
Kubernetes Fundamentals4 / 4
KUBERNETES↗

Limiting CPU and Memory Consumption of Pods in Kubernetes

Learn how to configure requests and limits in Kubernetes Pods, understand how the Scheduler uses these values, and why CPU and memory limits are important.

// Series
Kubernetes Fundamentals3 / 4
KUBERNETES↗

Creating and Managing Pods with kubectl and YAML Manifests

Learn how to generate YAML manifests, create Pods, and use the main kubectl commands to manage resources in Kubernetes.

// Series
Kubernetes Fundamentals2 / 4
KUBERNETES↗

Understanding Pods and kubectl

Understand what Pods are, how kubectl works, and how to create your first Kubernetes resources using YAML manifests.

// Series
Kubernetes Fundamentals1 / 4
CI/CD↗

Automating Terraform validation using scripts within GitHub Actions workflows

Learn how to use Bash scripts within GitHub Actions workflows to better organize your pipelines, reuse commands, and automate tasks like Terraform project validation.

NETWORKING↗

Understanding Networks with Wireshark, DNS, and VPN

Understand how network traffic works, how to analyze packets with Wireshark, what changes when using a VPN, and why this knowledge is important for DevOps.

LINUX↗

Surviving the Shell: From FHS to Diff, the Linux You Use Every Day

Cleaned-up study notes: directory structure, permissions, file manipulation, wildcards, compression, links, processes, and log reading in the terminal.

CI/CD↗

Understanding Contexts in GitHub Actions: github, env, vars, and secrets

Learn how GitHub Actions contexts work, when to use github, env, vars, and secrets, and understand the differences between them with practical examples.

LINUX↗

Working with Files in Linux: Hard Links, Viewing, Logs, and Comparison

Learn to create hard links and use cat, less, head, tail, grep, wc, and diff to view, follow, and compare files directly from the terminal.

KUBERNETES↗

Understanding Control Plane and Workers

What a Pod is under the hood, why it exists, and how Linux namespaces make it all possible.

KUBERNETES↗

Truly Understanding Pods in Kubernetes

What a Pod is under the hood, why it exists, and how Linux namespaces make it all possible.

DOCKER↗

Docker Image Security: Trivy, Docker Scout, Distroless, and Signing with Cosign

Close the Docker learning loop by learning to scan for vulnerabilities with Trivy and Docker Scout, reduce the attack surface with distroless images, and sign images with cosign.

// Series
Docker in Practice9 / 9
DOCKER↗

Docker Compose: Orchestrating Multiple Containers

Learn to define services, networks, volumes, and resource limits in a single file with Docker Compose, instead of repeating `docker run` commands.

// Series
Docker in Practice8 / 9
CI/CD↗

Understanding GitHub Actions Triggers

Learn how push, pull_request, workflow_dispatch, schedule, create, delete, and branch_protection_rule events initiate workflows in GitHub Actions.

DOCKER↗

Docker Networking: Connecting Containers and Limiting Resources

Learn to create networks in Docker so containers can communicate by name, and how to limit CPU and memory with --cpus and --memory.

// Series
Practical Docker7 / 9
DOCKER↗

Multi-stage builds — much smaller Docker images

How to use multi-stage builds to separate build from runtime and drastically reduce the size of your images.

DOCKER↗

Volumes, bind mounts, and tmpfs in Docker

Understand why containers need volumes to persist data and learn the differences between bind mounts, named volumes, and tmpfs.

// Series
Docker in Practice6 / 9
CI/CD↗

Understanding GitFlow, Pull Requests, and Branch Protection

Learn how to organize development with GitFlow, create Pull Requests, protect important branches, and define reviewers with CODEOWNERS.

DOCKER↗

HEALTHCHECK: Teaching Docker to Distrust Its Own Container

Understand why a container might be running and still not be healthy, and how the HEALTHCHECK instruction solves this blind spot.

// Series
Docker in Practice5 / 9
DOCKER↗

All Dockerfile Instructions and the Difference Between ENTRYPOINT and CMD

A reference guide for the main Dockerfile instructions and a practical explanation of how ENTRYPOINT and CMD work together.

// Series
Docker in Practice4 / 9
DOCKER↗

Dockerfile in Practice: From Your First Image to `docker build`

Understand what a Dockerfile is, how its instructions become image layers, and build your first Docker image from scratch with `docker build`.

// Series
Docker in Practice3 / 9
TERRAFORM↗

Terraform state - the file that can take down your infra

What Terraform state is, why it should never live on your machine, and how to configure a remote backend with locking.

DOCKER↗

Detached Mode, Docker Exec, and Testing Containers from Within

Learn how to run containers in the background with -d, access them with docker exec, publish ports with -p, and investigate what's happening inside.

// Series
Docker in Practice2 / 9
DOCKER↗

Managing Containers Day-to-Day with Docker

Practical notes on the lifecycle of a Docker container, from docker run to docker stats, including logs, pause, and prune.

CI/CD↗

Understanding GitHub Actions

Understand what GitHub Actions is, how it works, and how to use workflows to automate tasks like tests, builds, and deploys directly on GitHub.

LINUX↗

Linux Infrastructure Fundamentals: Networking, SSH, SCP, and LVM

A practical journey through networking fundamentals, remote access with SSH, file transfer with SCP, and disk management with LVM.

DOCKER↗

Explaining Docker as a Franchise

Understand Dockerfile, image, container, and configurations using a simple franchise analogy.

DOCKER↗

How Containers Work Under the Hood

Understand how Docker and the Linux kernel use cgroups and namespaces to isolate processes, network, users, filesystems, and resources within containers.