VuTrinh.

VuTrinh.

Docker for data engineer

Containerization → Reproducibility + Isolation

Vu Trinh's avatar
Vu Trinh
Jul 14, 2026
∙ Paid

I'm offering a limited-time 50% discount on the annual plan:

50% OFF FOREVER

Once you claim it, the discount will be applied forever.

Now, with only $5/month, you will have access to:

  • 200+ deep-dive data engineering articles

  • practice-spark: 65 LeetCode-style problems to practice Spark SQL/DataFrame

  • learn-spark/dbt/airflow: CLI tools to master Spark/dbt/Airflow

If you’re a Vietnamese user, please DM me for an upgrade due to payment issues


Intro

I’ve had the chance to learn so many things through my career. From data engineering stuff like BigQuery, Spark, Airflow, and Dagster, to actually developing a backend application or a CI/CD pipeline.

I feel lucky.

However, one piece of knowledge I truly appreciate having gained early.

It’s Docker—or, more generally, the ability to containerize any application.

To continue my process of unlearning (first with Parquet here), I relearned Docker and am sharing what I discovered in this article.

The goal is not to cover every corner of Docker; instead, I aim to provide enough material to help you understand and apply what you learn here to real-world workloads.

Note: What I want to cover here is primarily containerization. However, there is currently no containerization technology more dominant than Docker, so most of this article still focuses on Docker. Whenever the opportunity arises, I'll zoom out and discuss containerization concepts more broadly.


What is it?

In the past, if a company wanted to run a new application, the IT department needed to buy a new server. Then, the developer would deploy the application on it.

However, the downside is that a server back then could only handle a single application; if another app required an isolated runtime, it must be run on a different server.

Predicting the application’s utilization is indeed a challenge: if the server doesn’t give enough resources, you must buy more hardware; if the application doesn’t use all the resources, you accept the waste, as a server can only handle one isolated application at a time.

Virtual machines fixed this.

With a hypervisor, one physical server can host multiple applications, each in its own VM, securely and in isolation.

It was a big deal. (You could imagine)

However, VMs have overhead.

Every VM needs its own full operating system, and that OS consumes CPU and RAM that could have been used for your application. The OS needs patching, monitoring, and sometimes a license fee.

Then, a container is introduced to solve the problem.

From the outside, a container looks like a VM. Your application still runs in isolation from everything else.

The difference is that it doesn’t bring its own OS; all containers on a machine share the host’s kernel. No separate OS means no OS overhead: the application can use more RAM and CPU now, and the container's startup time will be faster than a VM's.

We can’t talk about containers without mentioning Docker.

Container technology existed long before Docker. However, it was complex and not so user-friendly at first.

It wasn’t until Docker came into town. When you hear people mention “Docker”, there is a high chance they are referring to the Docker technology, not the company Docker, Inc.

Docker is the software that creates, manages, and orchestrates containers. It’s built from various tools from the Moby open-source project. Docker allows users to focus on applications without worrying much about the underlying infrastructure.

For the rest of the article, I will use “Docker“ to refer to the Docker software, not the Docker, Inc company.

Before diving into it, let’s clarify one thing: Why should data engineers learn Docker, or more generally, containerization?

Why learn Docker?

September 23rd, 2019. My first day at my first (data) job.

I had just graduated, and I walked in expecting to touch the cool stuff: Spark, Hadoop, Kafka, etc.

But life is life; nothing as expected.

My first task was to do something I had never heard of: Docker. I struggled for two weeks. Now, looking back, I realize the main reason for the struggle was skipping the “why” and jumping straight into remembering the commands and getting things running.

Almost seven years later, I can say that Docker has quietly become one of the most important skills in my career. It does nothing to make my applications, queries, or data transformations faster, but it provides software characteristics that are just as important as performance: reproducibility and isolation.

Having these two means you can do a lot of things in data/software engineering:


I’m offering a limited-time 50% discount on the annual plan:

50% OFF FOREVER

Once you claim it, the discount will be applied forever.

Grab it now and become a paid member to get access to:

  • 200+ deep-dive data engineering articles

  • practice-spark: 65 LeetCode-style problems to practice Spark SQL/DataFrame

  • learn-spark/dbt/airflow: CLI tools to master Spark/dbt/Airflow

If you’re a Vietnamese user, please DM me for an upgrade due to payment issues

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2026 Vu Trinh · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture