들어가면서
최근 받은 업무 중 docker-compose
를 사용하는 일이 있었다. 지금까지 Docker 아니면 Kubernetes로 모든 문제가 해결된다고 생각했는데, 이번에 docker-compoese를 공부하면서 이게 완전히 잘못된 생각임을 알게 됐다.
사실 최근에는 Kubernetes(k8s)가 압도적으로 Container orchestration 시장을 점유하고 있어서 Docker-compose나 Docker Swarm은 거의 사용해보지 못한 사람도 많을 것이다(나처럼). 그럼에도 Docker compose와 같은 도구를 사용하는 이유는 뭘까?
💯비교해보자
아래 네 가지를 각각 정리해보면 이해가 빠를 것 같다.
- Docker
- Docker-compose
- Docker Swarm
- Kubernetes
Docker
도커는 컨테이너 이미지를 만들고 배포하는 툴이다. localhost
에 포트가 노출되어있다. 컨테이너가 다른 컨테이너와 통신하지 않고 독립적으로 작동하거나, 서로 통신하는 컨테이너 수가 비교적 적을 때 유용하다.
Docker compose
여러 개의 도커 컨테이너를 동시에 실행하는 툴이다. 여러 개의 컨테이너들은 모두 localhost
에 노출되어 있다. 즉 싱글 호스트이다. 여러 개의 컨테이너를 일일이 실행시키지 않고 docker-compose.yml
파일에 정의된대로 docker-compose up
하면 되기 때문에 편리하다.
Docker Swarm
컨테이너 클러스터를 만들고 관리하는 툴이다. 흔히 Container orchestration이라고 한다. 각각의 컨테이너는 별도의 멀티 호스트로 구성되지만, localhost
에 포트를 노출하도록 구성할 수 있다.
Kubernetes
Container orchestration 분야에서 De facto인 툴이다. 클러스터 내부와 외부가 단절되어 있어 별도의 네트워크 레이어가 있어야 통신이 가능하다. 설정이 가장 복잡하지만 그만큼 기능이 많다.
어떻게 사용해야 할까?
위의 설명에서 알 수 있듯이 단순히 컨테이너를 실행하기만 하면 되는 용도라면 Docker 또는 Docker compose로 충분히, 그리고 쉽게 목표를 달성할 수 있다. 그리고 비교적 단순한 Microservice의 경우에도 Docker Swarm을 이용하면 scalable하고 stable하게 서비스 배포가 가능하다.
반면 대규모 Microservice의 경우에는 Kubernetes로 배포하는게 훨씬 편리하다. 설정 방법이 Docker Swarm에 비해 복잡하지만 그만큼 다양한 기능을 사용할 수 있기 때문이다.
참고
Simplifying the mystery: When to use docker, docker-compose, docker swarm and Kubernetes