A satellite project of labs.iximiuz.com - an indie learning platform to master Linux, Containers, and Kubernetes the hands-on way π
|
Hello π After preparing over 100 practical exercises on Linux, Docker, Kubernetes, and networking, which have been solved more than 50K times in total, I can confidently say that the topic that attracts the least interest is building container images. No wonder most images end up bloated and full of CVEs. One reason for the lack of interest may be that container images are no-man's land. Developers may not feel the pain that bloated & vulnerable images cause in production, and the ops people may not be sufficiently versed in the application stacks to feel confident suggesting Dockerfile changes. And this creates a unique opportunity for you. If you're a developer, learning just a tiny bit of Linux & Docker can quickly make you a go-to person for all things building images. And if you're an SRE/DevOps engineer, getting your hands dirty with Node.js, Python, or Go ecosystems & application stacks will help you fix image issues right in Dockerfiles - not when a bloated image congests your release pipelines or production gets hacked. And this is how you become instrumental for the project's success π If you liked the sound of it, I've got some good news: the second module of my hands-on Docker roadmap is finally complete, and it focuses on all things building images. The module consists of:
You'll start by building images from existing Dockerfiles, then gradually progress to writing simple Dockerfiles for Node.js, Go, and Python, installing system and application dependencies, compiling apps during the docker build process, optimizing images with multi-stage builds, supporting foreign CPU architectures, and finally producing production-ready images. The roadmap is heavily focused on learning by doing, but it also includes deep dives into image internals (the OCI Image Spec, visually explained) and the fundamental Linux capabilities behind container images, so the skills you'll get won't be superficial. And I left the best part to the end - to celebrate this important milestone, I'm making all materials of the second module free until May π But don't put it on the back burner - the materials will be free only for one month! New iximiuz Labs featuresMy main focus in April was on preparing new learning materials and supporting a couple of events during KubeCon (what a crazy week), but I also managed to ship a couple of features. Daily PracticeThe main dashboard got a new default tab that recommends up to 4 daily challenges - one per key category: Linux, Networking, Docker, and Kubernetes. I've already heard from several people that they really liked this addition, as it reduces the friction of picking your next exercise and also tricks you (in a good way) to play the Inbox Zero game and make all the doughnut charts green. And just a friendly reminder that solving a challenge permanently adds +5 minutes to your max daily usage time, and the first 10 solved challenges will reward you with a month of free Premium access π New Labctl IDE commandNo more bizarre A quick example: start a new Go development sandbox, clone a repo into it, and open your local VS Code pointed to that repo:
Check the docs for a few more examples & use cases. Automatic HTTP(S) Port ScanningExposing HTTP/HTTPS ports has become much handier. The VM's resident agent (examiner) gained port-scanning capability to detect open HTTP/HTTPS ports and recommend them in the Expose Port UI dialog. The feature is also available in the CLI: you can use the new Thanks to Arjun Dandagi for nerd-sniping me!
Materials by the communityOne more fruitful month for the iximiuz Labs community! βUncloud: How to Deploy a Django Web Application - a new tutorial by Anton Ovchinnikov and Pasha Sviderski on how to deploy a Django app to a bunch of VMs, the pragmatic & lightweight way. If your setup has outgrown a single-host Docker Compose but Kubernetes' complexity still feels like unnecessary overkill, Uncloud might be a solid middle ground.
βAn iximiuz Cluster of Clusters with Tailscale and Cilium by Adam Leskis. A fascinating experiment in which Adam connected a few iximiuz Labs' playgrounds, each running several VMs, into a single overlay network, then provisioned a Kubernetes cluster on top, deployed a test microservice application, and visualized its traffic. This is exactly how learning happens! Surely it'll make a great story for a technical interview, and the fact that the results are documented as a blog post and a reusable playground makes it twice as valuable. Be like Adam! βLog Parser Playground by Adam again. The playground generates one log parsing activity at a time, and regenerates a new one when you complete the parsing check. It uses authentic log formats such as Nginx access logs and Syslog entries to simulate realistic parsing scenarios. Perfect for training Linux command-line skills. βArjun Dandagi continued his experiments with running GUI applications on iximiuz Labs. This time, we've got Omakub (an opinionated Ubuntu setup) as a remote desktop playground. You can play with its beautiful interfaces right from the browser (via Apache Guacamole) or any compatible local RDP client. Latency can definitely be improved, but one use case where it doesnβt matter much is running a coding agent in the same playground and connecting it directly to a remote Chrome instance. A new batch of hands-on Kubernetes challenges by Omkar Shelke. If you're preparing for CKA/CKAD/CKS exams, solving them is a good way to practice:
Good technical reads & linksβA Decade of Docker Containers - Despite the lengthy and a little too broad foreword, the article eventually turns into a great technical write-up on which Linux capabilities made Docker (and later on - OCI) containers possible, and how the tech "emulates" the user experience on non-Linux platforms. A bunch of helpful diagrams included. Definitely a good recap, even if you already "know it all". βYour Container Is Not a Sandbox by Emir BeganoviΔ of Booking.com - An impressive, interactive, and most importantly, comprehensive overview of the microVM ecosystem (Firecracker, Cloud Hypervisor, QEMU, libkrun, crosvm, and more). Why would you want to use a microVM instead of a container? Because containers are not a security boundary. Docker solved application packaging and resource sharing problems, but the default isolation Linux containers provide is too weak. Itβs usually good enough for trusted multi-tenancy, but 8 escape CVEs in 18 months make it a poor choice for potentially rogue workloads like AI agents or unvetted AI-generated code. And by the way, you can and often should still use containers - but inside microVMs. βRunning Agents on Kubernetes with Agent Sandbox - Kubernetes Blog - A βClinejection - Compromising Cline's Production Releases just by Prompting an Issue Triager - Simon Willison's take on yet another exploit of GitHub actions. The novelty in this one is that it was done via a prompt injection targeting a seemingly harmless AI automation workflow (doing issue triaging). But IMO, the scariest part here is how the lateral movement happened. The targeted workflow didnβt contain any critical tokens to steal, so the attackers spoiled the GitHub actions cache (of the βTrivy Under Attack Again: Widespread GitHub Actions Tag Compromise Exposes CI/CD Secrets - Twice in one month. It's a bit ironic that a vulnerability scanner that you installed to make sure your container images are secure may end up being the thing that actually steals your data. Software development becomes increasingly insecure, and GitHub and other software supply chain links aren't keeping up. One more reason to do more work in isolated sandboxes like iximiuz Labs playgrounds. βPackage Managers Need to Cool Down - A "dependency cooldown" is something I've been exercising since way before the original post about it was written by William Woodruff. The idea is simple - if βAwesome npm Security Best Practices by Liran Tal, my Node.js security go-to person - a complementary (to the above post) resource with a bunch of "best practices" which, in particular, shows how to configure the package installation cooldown period for all popular package managers ( Wrapping upThat is it for March. Lots of things to explore and learn, but it'll definitely pay off. Focusing on fundamentals now matters more than ever, and the best way to get them straight is by doing! πͺ Happy hacking! Ivan |
A satellite project of labs.iximiuz.com - an indie learning platform to master Linux, Containers, and Kubernetes the hands-on way π