Close

Kubernetes와 Docker 비교

Kubernetes와 Docker의 주요 차이점 및 컨테이너화에서 해당하는 부분

Josh Campbell 얼굴 사진
Josh Campbell

제품 매니저

편집 기고자: Chandler Harris

Docker는 컨테이너화 플랫폼 및 런타임이며 Kubernetes는 여러 컨테이너 런타임에서 컨테이너를 실행하고 관리하기 위한 플랫폼입니다. Kubernetes는 Docker를 포함한 수많은 컨테이너 런타임을 지원합니다.

2013년에 Docker를 공개했을 때 컨테이너의 최신 시대가 시작되었고 마이크로서비스를 기반으로 한 컴퓨팅 모델이 탄생했습니다. 컨테이너는 자체 운영 체제에 의존하지 않으므로, 팀이 애플리케이션, 종속성 및 구성을 컨테이너 이미지로 선언적으로 패키징할 수 있도록 지원하여 느슨하게 결합되고 확장 가능한 마이크로서비스 개발을 용이하게 만듭니다.

그러나 수많은 서버에 분산된 컨테이너를 유지하기 위해 애플리케이션이 복잡해짐에 따라 여러 컨테이너를 조정하고 예약하는 방법, 컨테이너 간 통신을 가능하게 하는 방법 및 컨테이너 인스턴스를 확장하는 방법과 같은 문제가 발생했습니다. 이러한 문제를 해결하기 위한 방법으로 Kubernetes가 공개되었습니다.

컨테이너 기술과 관련하여 Docker와 Kubernetes가 흔히 언급됩니다. 어느 것이 더 좋은지 궁금하실 수도 있습니다. 하지만 둘 중 하나를 선택하는 것이 아닌, 둘 다 효과적으로 사용하는 것이 관건입니다.

Docker란?


Docker는 개발자가 컨테이너를 빌드, 배포 및 실행하도록 지원하는 상용 컨테이너화 플랫폼 및 런타임입니다. 단일 API를 통한 간단한 명령과 자동화를 갖춘 클라이언트-서버 아키텍처를 사용합니다.

또한 Docker는 Dockerfile을 작성한 다음 Docker 서버를 사용하여 이미지를 구축하는 적절한 명령을 실행하여 변경할 수 없는 컨테이너 이미지로 애플리케이션을 패키징하는 데 일반적으로 사용하는 도구 키트를 제공합니다. 개발자는 Docker 없이도 컨테이너를 만들 수 있지만 Docker 플랫폼을 사용하면 보다 쉽게 만들 수 있습니다. 그런 다음 이러한 컨테이너 이미지를 Kubernetes, Docker Swarm, Mesos 또는 HashiCorp Nomad와 같은 컨테이너를 지원하는 모든 플랫폼에서 배포하고 실행할 수 있습니다.

Docker는 컨테이너화된 애플리케이션을 패키징하고 배포하는 효율적인 방법을 제공하지만, Docker만으로는 대규모로 컨테이너를 실행하고 관리하기 어렵습니다. 여러 서버/클러스터에서 컨테이너를 조정 및 예약하고, 가동 중지 시간 없이 애플리케이션을 업그레이드 또는 배포하고, 컨테이너의 상태를 모니터링하는 것은 고려해야 할 사항 중 일부에 불과합니다.

이와 같은 여러 문제를 해결하기 위해 컨테이너를 오케스트레이션하는 솔루션이 Kubernetes, Docker Swarm, Mesos, HashiCorp Nomad 등의 형태로 등장했습니다. 이를 통해 조직은 대량의 컨테이너와 사용자를 관리하고 부하를 효율적으로 분산하며 인증 및 보안, 다중 플랫폼 배포 등을 제공할 수 있습니다.

코드-스토어 아이콘
관련 자료

Microservices vs. monolithic architecture

세 개의 고리 아이콘
솔루션 보기

Compass를 사용하여 구성 요소 관리

Kubernetes란?


Kubernetes(K8s라고도 함)는 네트워크로 연결된 리소스의 클러스터 전체에서 컨테이너 런타임 시스템의 오케스트레이션에 널리 사용되는 오픈 소스 플랫폼입니다. Kubernetes는 Docker와 함께 또는 따로 사용할 수 있습니다.

Kubernetes는 원래 일주일에 수십억 개의 컨테이너를 대규모로 실행할 수 있는 새로운 방법이 필요했던 Google에서 개발했습니다. Kubernetes는 2014년 Google에서 오픈 소스로 릴리스했으며 현재는 컨테이너 및 분산 애플리케이션 배포를 위한 업계 표준 오케스트레이션 도구 및 시장 리더로 널리 인정받고 있습니다. Google은 Kubernetes의 “주요 설계 목표는 복잡한 분산 시스템을 쉽게 배포하고 관리할 수 있도록 하는 동시에 컨테이너를 통해 가능한 사용률 개선의 이점을 누리는 것”이라고 언급했습니다.

Kubernetes는 컨테이너 집합을 동일한 시스템에서 관리하는 그룹으로 번들링하여 네트워크 오버헤드를 줄이고 리소스 사용의 효율을 높입니다. 컨테이너 집합의 예로는 앱 서버, Redis 캐시 및 SQL 데이터베이스가 있습니다. Docker 컨테이너는 컨테이너당 하나의 프로세스입니다.

Kubernetes is particularly useful for DevOps teams since it offers service discovery, load balancing within the cluster, automated rollouts and rollbacks, self-healing of containers that fail, and configuration management. Plus, Kubernetes is a critical tool for building robust DevOps CI/CD pipelines.

그러나 Kubernetes는 완전한 서비스형 플랫폼(PaaS)이 아니며, Kubernetes 클러스터를 구축하고 관리할 때 염두에 두어야 할 여러 고려 사항이 있습니다. Kubernetes 관리에 따른 복잡성은 많은 고객이 클라우드 공급업체의 관리형 Kubernetes 서비스를 사용하기로 선택하는 큰 요인입니다.

Kubernetes의 장점


종종 “클라우드의 Linux”라고 불리는 Kubernetes가 가장 인기 있는 컨테이너 오케스트레이션 플랫폼인 데는 그만한 이유가 있습니다. 그 중 몇 가지는 다음과 같습니다.

운영 자동화

Kubernetes에는 kubectl이라는 강력한 API 및 명령줄 도구가 함께 제공되며 이 도구는 운영을 자동화하여 컨테이너 관리에 수반되는 힘든 작업을 처리합니다. Kubernetes의 컨트롤러 패턴은 애플리케이션/컨테이너가 정확하게 지정된 대로 실행되도록 합니다.

인프라 추상화

Kubernetes는 사용자를 대신하여 Kubernetes에서 사용 가능한 리소스를 관리합니다. 이를 통해 개발자는 기본 컴퓨팅, 네트워킹 또는 스토리지 인프라가 아니라 애플리케이션 코드 작성에 집중할 수 있습니다.

서비스 상태 모니터링

Kubernetes는 실행 환경을 모니터링하고 원하는 상태와 비교합니다. 서비스에 대한 상태 확인을 자동으로 수행하고 실패 또는 중지된 컨테이너를 다시 시작합니다. Kubernetes는 서비스가 실행 중이고 준비된 경우에만 서비스를 사용할 수 있도록 합니다.

Kubernetes와 Docker 비교


Kubernetes와 Docker 비교 이미지

Docker는 컨테이너화 런타임인 반면, Kubernetes는 여러 컨테이너 런타임에서 컨테이너를 실행하고 관리하기 위한 플랫폼입니다. Kubernetes는 Docker, containerd, CRI-O 및 모든 Kubernetes CRI(컨테이너 런타임 인터페이스) 구현을 포함한 수많은 컨테이너 런타임을 지원합니다. Kubernetes를 “운영 체제”에 비유한다면 Docker 컨테이너는 “운영 체제”에 설치하는 “앱”이라고 할 수 있습니다.

Docker는 그 자체만으로도 최신 애플리케이션 개발에 매우 유용합니다. “내 시스템에서는 작동하지만” 다른 시스템에서는 작동하지 않는 고전적인 문제를 해결해 줍니다. 컨테이너 오케스트레이션 도구인 Docker Swarm은 일부 컨테이너의 프로덕션 컨테이너 워크로드 배포를 처리할 수 있습니다. 시스템이 성장하여 네트워크로 서로 연결된 많은 컨테이너를 추가해야 하는 경우, 독립형 Docker는 Kubernetes가 해결할 수 있는 성장통을 겪을 수 있습니다.

이 둘을 비교할 때는 Kubernetes와 Docker Swarm을 비교하는 것이 더 좋습니다. Docker Swarm 또는 Docker Swarm 모드는 Kubernetes와 같은 컨테이너 오케스트레이션 도구로, Docker 서버를 실행하는 여러 호스트에 배포한 여러 개의 컨테이너를 관리할 수 있습니다. Swarm 모드는 기본적으로 사용 중지되어 있으며 DevOps 팀에서 설정 및 구성해야 합니다.

Kubernetes는 시스템의 클러스터를 오케스트레이션하여 함께 작동하고 사용 가능한 리소스를 기반으로 해당 시스템에서 실행하도록 컨테이너를 예약합니다. 컨테이너는 선언적 정의를 통해 Kubernetes의 기본 단위인 포드로 그룹화됩니다. Kubernetes는 서비스 검색, 부하 분산, 리소스 할당, 격리, 포드의 수직적 또는 수평적 확장과 같은 작업을 자동으로 관리합니다. 오픈 소스 커뮤니티에서 채택되었으며 현재 Cloud Native Computing Foundation의 일부가 되었습니다. Amazon, Microsoft 및 Google은 모두 클라우드 컴퓨팅 플랫폼에서 관리형 Kubernetes 서비스를 제공하므로 Kubernetes 클러스터와 컨테이너화된 워크로드를 실행하고 유지 관리하는 운영 부담이 크게 줄어듭니다.

Docker 또는 Kubernetes: 내게 적합한 것은?


Docker 또는 Kubernetes: 내게 적합한 것은?

Docker Swarm과 Kubernetes 모두 컨테이너 오케스트레이션 플랫폼이라면 어떤 것을 선택하시겠습니까?

Docker Swarm은 자체 인프라를 구축하고 실행하는 경우 일반적으로 Kubernetes보다 더 적은 설정 및 구성이 필요합니다. 선언적 YAML 파일을 통한 애플리케이션 배포, 원하는 상태로 서비스 자동 확장, 클러스터 내 컨테이너 간 부하 분산, 서비스 전반에 걸친 보안 및 액세스 제어와 같이 Kubernetes와 동일한 장점을 제공합니다. 실행 중인 워크로드가 적거나, 자체 인프라를 관리해야 해도 괜찮거나 Kubernetes가 제공하는 특정 기능이 필요하지 않은 경우 Docker Swarm을 선택하는 것이 좋을 수 있습니다.

Kubernetes는 처음에는 설정이 더 복잡하지만 보다 뛰어난 유연성과 기능을 제공합니다. 또한 활발한 오픈 소스 커뮤니티의 광범위한 지원을 받고 있습니다. Kubernetes는 즉시 사용 가능한 여러 배포 전략을 지원하고, 네트워크 수신을 관리할 수 있으며, 컨테이너에 대한 관찰 기능을 바로 제공합니다. 모든 주요 클라우드 공급업체는 자동 확장과 같은 클라우드 네이티브 기능을 훨씬 쉽게 시작하고 활용할 수 있는 관리형 Kubernetes 서비스를 제공합니다. 많은 워크로드를 실행 중이고 클라우드 네이티브 상호 운용성이 필요하며 조직에 많은 팀이 있어 서비스 격리가 더 많이 필요한 경우 Kubernetes를 플랫폼으로 고려하는 것이 좋습니다.

Compass 및 컨테이너 오케스트레이션


어떤 컨테이너 오케스트레이션 솔루션을 선택하든, 확장함에 따라 분산 아키텍처의 복잡성을 관리하기 위해 도구를 사용하는 것이 중요합니다. Atlassian Compass는 개발자 경험 플랫폼으로, 엔지니어링 결과물에 대한 단절된 정보와 팀 차원의 공동 작업을 검색 가능한 중앙 집중식 위치로 모아줍니다. Compass는 구성 요소 카탈로그를 통해 마이크로서비스의 무분별한 확장을 줄이는 데 도움이 될 뿐만 아니라 성과 기록표를 사용하여 모범 사례를 수립하고 소프트웨어 상태를 측정하며, Atlassian Forge 플랫폼에 구축된 확장 기능을 사용하여 DevOps 도구 체인 전반에 걸쳐 데이터와 인사이트를 제공할 수 있습니다.

Josh Campbell
Josh Campbell

Josh Campbell is a product manager for Atlassian and has worn many hats in his career. He enjoys working on things that make the job of an engineer easier and has deep customer empathy, especially when it comes to working with bad technology tools. In his spare time, Josh likes biking with his daughters, eating and drinking things that are bad for him, and playing with new technologies.


이 문서 공유
다음 주제

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

Compass 커뮤니티

장애물 극복 일러스트레이션

자습서: 컴포넌트 만들기

맵 일러스트레이션

Compass 무료로 시작하기

DevOps 뉴스레터 신청

Thank you for signing up