What's the difference between Docker Compose and Kubernetes?
Docker:
- Docker is the container technology that allows you to containerize your applications.
- Docker is the core of using other technologies.
Docker Compose
- Docker Compose allows configuring and starting multiple Docker containers.
- Docker Compose is mostly used as a helper when you want to start multiple Docker containers and don't want to start each one separately using
docker run ...
. - Docker Compose is used for starting containers on the same host.
- Docker Compose is used instead of all optional parameters when building and running a single docker container.
Docker Swarm
- Docker Swarm is for running and connecting containers on multiple hosts.
- Docker Swarm is a container cluster management and orchestration tool.
- It manages containers running on multiple hosts and does things like scaling, starting a new container when one crashes, networking containers ...
- Docker Swarm is Docker in production. It is the native Docker orchestration tool that is embedded in the Docker Engine.
- The Docker Swarm file named stack file is very similar to a Docker Compose file.
Kubernetes
- Kubernetes is a container orchestration tool developed by Google.
- Kubernetes' goal is very similar to that for Docker Swarm.
Docker Cloud
- A paid enterprise docker service that allows you to build and run containers on cloud servers or local servers.
- It provides a Web UI and a central control panel to run and manage containers while providing all the Docker features in a user-friendly web interface.
Update:
Docker cloud "partially" discontinued
The services on Docker Cloud that provide application, node, and swarm cluster management will be shutting down on May 21 [2020]... automated builds and registry storage services, will not be affected and will continue to be available
In addition to @yamenk's answer, I'd like to add a few details here which might help people with their journey of understanding Kubernetes.
Short answer:
docker-compose
: is a tool that takes a YAML file which describes your multi-container application and helps you create, start/stop, remove all those containers without having to type multipledocker ...
commands for each container.Kubernetes
: is a platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. What? Keep reading...
Docker Compose
(from the docs): Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. Compose has commands for managing the whole lifecycle of your application:
- Start, stop, and rebuild services
- View the status of running services
- Stream the log output of running services
- Run a one-off command on a service
Kubernetes
(from Introduction to Kubernetes): Kubernetes is a container orchestrator like Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad. Container orchestrators are the tools which group hosts together to form a cluster, and help us make sure applications:
- are fault-tolerant,
- can scale, and do this on-demand
- use resources optimally
- can discover other applications automatically, and communicate with each other
- are accessible from the external world
- can update/rollback without any downtime.
Many people argue that Kubernetes is hard to learn. It's because it solves a series of problems and people try to understand without knowing all the prerequisites. This makes it complicated. Start putting the pieces of the puzzle together by reading about concepts/terms like the following. This process will help you understand the kind of problems Kubernetes tries to solve:
- 12-factor apps,
- Automatic binpacking,
- Self-healing mechanisms,
- Horizontal scaling,
- Service discovery and Load balancing,
- Automated rollouts and rollbacks,
- Blue-Green deployments / Canary deployments
- Secrets and configuration management,
- Storage orchestration
And because there are a lot of different things around containers and their management, keep an eye on the Cloud Native landscape:
Interactive version here: landscape.cncf.io/
Updates
May 2020: Docker Compose Specification is now an open standard
Working with AWS, Microsoft, and others in the open source community, we have extended the Compose Specification to support cloud-native platforms like Kubernetes, and Amazon ECS in addition to the existing Compose platforms. More here: blog / compose-spec.io
If you are networking containers withing the same host go for docker compose.
If you are networking containers across multiple hosts go for kubernetes.