컨테이너와 가상머신의 차이점 with Docker

아키텍쳐 설계한 내용을 바탕으로 개발 어플리케이션을 배포를 할 때, 당연하게 AWS EC2와 Docker를 이용해서 배포를 진행하고 있었다.

 

하지만??

Docker를 사용해야 하는 이유에 대해 동료 개발자가 질문을 했을 때 대답을 할 수 없었다. 당연하게 사용하고 있었기 때문이다.

그래서 Docker의 특징인 컨테이너가 무엇인지 가상머신과의 차이점은 무엇인지, 그에 따른 특장점에 대해 알아보려고 한다.

 

기존 서버 관리의 문제점

전용 서버 방식

기존 서버를 이용한 배포에서는 서버 하나에 여러 개의 프로그램을 설치하는 것도 번거로운데, 포트끼리 충돌이 일어날 가능성이 높다.

전용 서버 방식

만약 아래와 같이 테스트 서버에서 개발을 진행하고 운영 서버로 개발 내용을 이식을 한다고 가정을 해보자.

실제로 운영 서버에 테스트 서버에 배포했던 것을 똑같이 배포하려고 한다면 같은 성능을 하는 하드웨어 장비, 같은 버전의 커널, 동일한 코드가 필요할 것이다. 만약 3가지 중 하나라도 충족하지 않는다면 다음과 같은 상황이 벌어질 것이다.

 

운영팀 : 이거 프로그램이 잘 돌았습니까??

개발팀 : 어라 분명히 테스트 환경에서는 잘 돌았는데,,,,

 

실제로 개발 환경에서는 잘 동작되었던 환경이였다.

또한 이러한 전용 서버 방식은 다음과 같은 문제점이 존재한다.

  • 배포에 수개월 소요
  • 추가적인 하드웨어 장비의 필요 (비용증가)
  • 이동 불가능
  • 하드웨어 성능 낭비

 

컨테이너와 가상머신(VM)의 차이

Docker vs Hypervisor

 

가상머신

HyperVisor (하이퍼바이저)

각 VM에서는 독립적인 OS를 가지고 있어 우리가 컴퓨터에 windows를 설치해야 하는 것처럼 매번 해줘야 한다.

windows10 환경에서 docker를 설치할 때 HyperVisor를 활성화 시켜야 설치를 할 수 있다고 하는데 HyperVisor란 단일 물리적인 컴퓨터(단일 하드웨어)에 가상머신(VM)을 여러 대 생성하고 실행하는 프로세스이다.

 

 

가상머신의 대표적인 예시

AWS EC2 (Elastic Compute Cloud)

AWS에서 제공하는 클라우드 컴퓨팅이다. 독립된 컴퓨터를 임대해주는 서비스로 하드웨어를 구매하지 않고 빠르게 어플리케이션 배포 환경을 구축할 수 있게 제공하는 서비스이다. AWS는 단일 하드웨어에서 Hypervisor를 통해 다수의 EC2 환경을 제공한다.

EC2 구조

 

컨테이너

  • 매번 Infra를 독립적으로 나눌 필요가 없고 OS또한 설치를 할 필요가 없는 독립적인 프로그램이며 커널(OS)단에서 애플리케이션을 격리하고 실행할 수 있는 환경을 제공한다.
  • 종속 항목까지 같이 묶여있기 때문에 (패키징) 어느 가상머신에서든 동작한다는 특징이 존재 한다.
  • OS 환경에 종속받지 않고 어플리케이션을 실행할 수 있다.

 

Docker 컨테이너

  • 서버의 환경과는 독립적인 OS 환경을 구축을 하고 배포 및 테스트 환경을 사용자 입맛에 따라 환경 구성이 가능하다.

 

Docker의 특징

  • 가상머신이 서버 하드웨어를 가상화 하는 방식과 비슷하다. (직접 관리해야 하는 필요성 제거)
  • 각 서버에 설치되어 컨테이너를 구축, 시간 또는 중단할 수 있는 간단한 명령어를 제공한다.

 

컨테이너 방식을 사용해야 하는 이유

  • 코드를 원활하게 이동하고 더 빨리 전달한다.
  • 애플리케이션 운영을 표준화한다.
  • 어디서나 안정적으로 실행할 수 있는 단일 객체를 확보
  • 서버 확장(Scale Out)이 유리하다.

 

 

'CS > 인프라' 카테고리의 다른 글

가상화와 하이퍼 바이저  (0) 2023.08.19
VPC란?? Virtual Private Cloud의 모든 것  (4) 2023.06.08
IaaS VS PaaS VS SaaS  (2) 2023.03.30
JenKins 개념 및 기능  (0) 2023.01.12