What is Docker Compose and How it Compares to Kubernetes

Containers have been around for ages. They address a critical pain point in the application development process. When developers write code, they work on their own local development environment. Once they are done with the actual code writing and ready to move the code to production, things begin to complicate. The code that worked perfectly on a local environment, suddenly starts to fall apart when it’s moved to production.

There are a couple of reasons why this tends to happen:

  • Local environment had a different OS
  • It used Different dependencies
  • Different libraries

….the list goes on.

Containers remove this nightmare scenario from our lives by allowing us to separate code from the underlying infrastructure it’s running on.

We at Share IT are super appreciative of Docker. We use Docker Compose on a regular basis to create applications for our customers. With that said, we believe in giving credit where credit is due. With that said, today’s blog post will be all about Docker Compose: what is it, why we love it, what we use it for, and how it compares to other similar solutions on the market. Let’s dive in.

Pre-Docker Container Maintenance and Manipulation Era

text

In the “prehistoric times” of software development, programmers relied on dinosaurs like chroot to change the root filesystem of a process and its offspring. Luckily for us, the days of chroot are nothing more than an ugly memory of senior developers who have been around when Pascal was still a thing.

Before Docker blew up, most developers struggled with containers. They relied on Virtual machines to get the job done. As you’re probably aware, VMs are not the best solution for this type of work. Using VMs to maintain and manipulate containers demands a lot mind-numbing, back and forth work. In addition to that, storage quickly becomes a major setback. You can only run two or three VMs on a high-performing server, which is far from enough.

To explain it as bluntly as possible, Docker made working with application containers better. It made them a lot easier to use. Docker helps software developers package and run applications inside neat little boxes, keeping the hosting computer squeaky clean and well-organized all the time.

In a nutshell, Docker’s container technology solved the container problem by innovating in two key areas:

  • Application packaging
  • Process isolation and management

Now it’s time to take a closer look at Docker Compose and its benefits.

What is Docker Compose?

Let’s first explain the difference between Docker and Docker Compose. Docker, a.k.a. Dockerfile, is a simple text file that contains commands a user can call to build an image.

Docker Compose is a tool for defining and running multi-container Docker applications. This means that the tool defines the services that make up the app in docker-compose.yml so programmers can run them together in an isolated environment.

The key functionality of Docker Compose is to get your app running with a single command. You use the YAML file to configure your applications services, and then, with a single command, create and run all those services from a single configuration. Pretty neat, right?

Why You Should Care About Docker Compose

text

  1. Super easy management - With just a single command, you can bring up and tear down the entire development environment. This magnificent option enables developers to keep their development environment in a single, central place. Plus, it also makes it super easy to deploy applications whenever and wherever we need to.

  2. Testing - With Docker Compose, developers are given the ability to run quick environment-to-environment tests for every unit. This comes in handy, indeed.

  3. Dozens of isolated environments on a single host - Docker Compose uses names to isolate environments for every project. This particular feature enables developers to run numerous copies of the same environment on a single machine and block different projects and services from getting in the way of each other.

Docker Compose is used by developers for multiple different things. In a nutshell, the tool is used wherever it can improve the workflow of a particular process.

Production, Staging, Development, Testing, CI workflows - you can use Docker Compose in any environment and any stage of the project.

How Does Docker Compose Work?

Regardless what your goal, the process of using Docker Compose always looks the same:

  • Step 1: Install Docker
  • Step 2: Create a Docker Compose file anywhere on your system and name it docker-compose.yml
  • Step 3: Configure application services using YAML files
  • Step 4: Check the validity of your file
  • Step 5: Once you validite it using the standard “$ docker-compose config” procedure, run your docker-compose.yml file (with a single command)
  • Step 6: Stop all the services with a single command (docker-compose down) when you want to scale specific services of your app

Kubernetes Vs. Docker

text

In case you’re new to the concept of Kubernetes, let’s first define what this solution is before we pin it against Docker:

Kubernetes, or simply known as “k8s”, is an open source platform used for automating Linux container operations. The platform cuts many manual steps from the deployment process. Simply put, Kubernetes enables developers to cluster together groups of hosts running Linux containers, and then easily and efficiently manage them how they want.

In a way, Kubernetes can be described as the “orchestrator of containers”. Since both Docker and Kubernetes deal with containers, people have naturally put them together to see which solution is better for this type of container-based work.

However, if we zoom out and think about what each of these platforms do, we can easily identify that they aren’t direct competitors. Docker Compose is a containerization platform, and Kubernetes is a container orchestrator for container platforms like Docker Compose.

These solutions are actually complementary to each other. There are numerous use cases where people have used Kubernetes as sort of a lead channel for Docker containers, enabling scheduling and automatic deployment at scale across multiple development environments in a neat, uniformed way.

When they use Kubernetes with Docker Compose, most developers use it because it gives them another layer of load balancing. It also enables the option of automated rollouts and rollbacks, which is often a total life-saver.

As a company that is focused on growth and will probably need to scale up its infrastructure relatively soon, introducing Kubernetes to your toolset early makes a lot of sense. And if you’re already using Docker, the addition of Kubernetes will make that transition as simple as possible.

So, to sum it up - looking at Kubernetes and Docker Compose as competitors is not really advisable. The right angle is to think of these two platforms as complementary pieces and figure out how to combine them for maximum gain.

Thank you for reading this article in its entirety! We hope it helped you realize the benefits of Docker Compose and how it compares to Kubernetes.

Check out other articles on the Share IT blog. In case you have a project in mind, feel free to reach out to us for a cost estimation. We’ll get back to you as soon as possible.