Docker와 Kubernetes란 무엇일까?

Updated:

Docker와 Kubernetes란?

  • Docker란, 서비스 운영 환경을 묶어 손쉽게 SW를 배포하고 실행하는 경량 컨테이너 기술입니다.
  • Kubernetes란, 컨테이너를 쉽고 빠르게 배포/확장/관리를 자동화 해주는 오픈 소스 플랫폼입니다.

여기서, Docker와 Kubernetes 모두 ‘컨테이너’라는 개념을 담고 있어요. 그렇다면 컨테이너란 무엇일까요?

Docker와 컨테이너

보통 IT를 잘 모르는 일반인의 경우 ‘컨테이너’라는 말을 듣는다면 아래와 같은 그림을 떠올릴거예요.

아래 그림과 같이 일반적으로 컨테이너는 어떠한 물건/물체를 격리하는 공간을 의미합니다.

화물업계에서는 컨테이너의 등장으로 다양한 형태의 화물들을 규격화하여 편하게 운송하는 것이 가능해졌습니다. 마찬가지로 IT 서비스를 운영하기 위해서는 서버를 준비하고 OS를 설치하고 관련SW를 설치하는 등 여러작업이 필요했고 하나의 서버공간을 구분하여 사용하는 것이 어려웠습니다. 그렇지만 컨테이너의 등장으로 독립된 가상 공간을 만들고 어플리케이션 구동에 필요한 SW들을 격리하여 담을 수 있게 되었습니다.

예를 들어, 아래의 이미지처럼 컨테이너 환경이란 하나의 서버 위에 컨테이너 엔진을 올리게 되면 여러 개의 컨테이너가 각각 격리된 상태로 올라가 여러 대의 서버를 쓰는 것과 같은 효과를 가지게 됩니다.

this is a placeholder image
Container 기반 구조

그렇다면 컨테이너 속에는 구체적으로 어떤 것들이 들어가 있을까요?

바로 서비스를 제공하는 애플리케이션과 애플리케이션 구동에 필요한 모든 설정 및 설치 파일들이 들어가 있어요. 뿐만 아니라, 이렇게 컨테이너화 된 SW들은 어떤 서버 환경에서도 모두 동일한 모습으로 동작하게 됩니다.

그런데 어떻게 이것들이 모든 서버 환경에 관계없이 똑같이 동작할 수 있을까요?

바로 Docker가 만들어주는 Image라는 것 덕분입니다. 이미지란 애플리케이션을 실행시키는 데 필요한 모든 SW와 설정 값들을 담고 있는 파일입니다.

보통 어플리케이션 실행을 위해서는 OS,Java,웹서버,데이터베이스 같은 것이 필요하고 이런 것들은 설치순서나 복잡한 설정이 필요합니다.

그런데 이미지는 이런것을 합해서 묶어버리고 뿐만 아니라 어떤 순서로 설치해야하는 지도 모두 담고 있어요. 그렇기 때문에 어떤 환경에서도 이 이미지라는 것을 사용하면 똑같이 동작하게 되는 거죠.

Docker는 이러한 이미지를 만들어 잘 포장시켜주고, 이미지가 잘 동작할 수 있도록 표준화도 시켜줍니다.

이렇게 만들어진 이미지는 Docker Hub 라는 Docker이미지공유 사이트에 올릴 수도 있고, 개인 저장소에 저장도 할 수 있어요. Docker Hub에서 전세계의 개발자들이 올려둔 이미지도 언제든 공짜로 가져다 쓸 수 있고요.

그럼 만약 새로운 애플리케이션을 컨테이너로 올리려면 어떻게 해야할까요?

바로 Docker Hub에서 애플리케이션 구동에 필요한 이미지를 다운로드 받아 애플리케이션과 함께 실행시키면 됩니다! 그럼 Docker가 컨테이너도 만들고, 애플리케이션을 배포해줄거에요.

이렇게 Docker는 그동안 힘들게 해야했던 일들을 자동화 시켜주고 전세계인들과 공유하게 해줌으로써 애플리케이션 배포와 운영의 불편함을 해결해주었습니다.

Kubernetes는 뭔데?

그렇다면 Kubernetes라는 것은 무엇일까요? 도커를 통해 컨테이너를 쉽게 만들수 있는데 수십~ 수천개의 컨테이너가 생겨나다 보니 관리가 필요했습니다. 그래서 필요한 것이 많은 컨테이너를 자동으로 배포/확장/관리해주는 플랫폼입니다.

현재 아래 이미지처럼 3개의 컨테이너가 동작하고 있다고 가정해보겠습니다.

그런데 갑자기 새벽 3시, HR의 컨테이너가 Down되어 버립니다! 말 그대로 서버가 죽어버린거죠.

이때 Kubernetes가 출동하여 자동으로 다시 컨테이너를 재기동 시켜주면서 서버를 살려줍니다.

이번엔 구매 시스템의 개발자가 구매 시스템의 코드를 수정하였다고 가정해볼게요.

이전에는 위 이미지처럼 코드를 변경하면 개발자와 운영자가 수동으로 위 프로세스를 거쳐야했습니다.

하지만, Kubernetes는 이것도 자동화 해줍니다.

이번엔 연말이 되어 결제 시스템이 폭주하였다고 가정해볼게요.

이전에는 서버가 폭주하면 서버가 내려가버리고.. 수동으로 서버를 증설해야했기 때문에 시간 또한 오래걸렸죠. 또한, 서버 폭주가 지난 후 일반적인 트래픽으로 돌아왔을 때 이미 증설한 서버는 계속해서 비용을 지불해야 했습니다. 하지만! Kubernetes는 자동으로 서버를 증설하고 관리해줍니다.

이처럼 Kubernetes는 컨테이너 관리를 더욱 간편하고 용이하도록 해줘, 컨테이너 기반 서비스 운영의 필수 요소가 되었습니다.

한 줄 요 약 : Docker는 독립적 컨테이너를 만들어 서비스실행을 편하게 해주는 것! Kubernetes는 Docker가 만들어준 컨테이너들의 운영을 자동화 시켜 더 편리하게 서비스를 운영하게 해주는 것!

어때요? Docker와 Kubernetes를 이제 조금은 아는 것 같다는 느낌이 드시나요? 이제 누군가 Docker랑 Kubernetes가 뭔지 물어본다면 자신있게 답해보세요 :)

깨알 지식 : k8s = Kubernetes 입니다. Kubernetes의 철자가 길어서, k와 s를 제외한 알파벳이 8개라 k8s로 불리게 되었답니다!