Knowledge/이론

가상화와 컨테이너

똑똑한망치 2024. 6. 12. 16:57
728x90
반응형

1. 가상화의 개념

가상화(Virtualization)란 하나의 물리적인 서버를 여러 개의 가상 서버로 분할해 사용하는 기술이다.

 

(1) 가상화의 종류

가상화는 크게 개발 환경 가상화, 머신 가상화, 운영체제 수준 가상화로 나뉜다.

 

개발 환경 가상화

  • 개발자가 웹 애플리케이션을 개발할 때 필요한 환경을 가상으로 구축하게 하는 기술이다.
  • 이 방식의 경우 한 컴퓨터에서 여러 웹 애플리케이션을 개발하더라도 각각의 환경을 구성할 수 있다.
  • 즉, 개발 환경마다 다른 관련 라이브러리나 패키지를 독립적으로 관리해 일관된 개발 환경을 유지할 수 있다.
  • 예를 들어 파이썬 개발을 위한 가상 환경을 만들어주는 가상 환경 관리자인 아나콘다(anaconda)가 있다.

머신 가상화

  • 가상 머신(Virtual Machine)으로 하나의 서버에서 여러 운영체제를 실행할 수 있게 하는 기술
  • 이 방식은 웹 애플리케이션마다 다른 운영체제를 사용해야 하는 경우나 특정 웹 애플리케이션을 특정 운영체제에서만 실행할 수 있는 경우에 유용하다.
  • 대표적인 가상 머신 소프트웨어로 버추얼 박스(Virtual Box), VMware, 시트릭스(Citrix), WSL(Windows Subsystem for Linux) 등이 있다.

운영체제 수준 가상화

  • 호스트 운영체제(실제 하드웨어 본체에 설치한 운영체제) 위에 격리된 컨테이너를 여러 개 만들어 각각의 컨테이너 안에서 웹 애플리케이션을 실행하는 기술
  • 하나의 운영체제 상에서 격리된 컨테이너를 여러 개 생성하고 각각의 컨테이너에서 웹 애플리케이션을 실행하기 때문에 다른 웹 애플리케이션과 충돌하는 것을 방지할 수 있다.
  • 컨테이너 기술을 사용한 대표적인 서비스에는 도커, 쿠버네티스 등이 있다.

 

2. 컨테이너의 개념

컨테이너(container)는 가상화 기술 중 하나로, 격리된 여러 개의 실행 환경을 제공하는 기술이다. 운영체제 수준 가상화를 기반으로 하며, 웹 애플리케이션을 실행하는 데 필요한 라이브러리, 실행 파일, 구성 파일 등이 포함된 패키지로 이루어져 있다.

 

가상 머신과 컨테이너

가상머신

  • 가상 머신은 하이퍼바이저(hypervisor)라는 소프트웨어 계층을 사용해 호스트 운영체제 위에 게스트 운영체제를 설치하고 사용하는 방식이다. 각 가상 머신은 자체적인 게스트 운영체제와 웹 애플리케이션을 가지며, 본 시스템으로부터 물리적인 하드웨어 자원(CPU, 메모리, 스토리지 등)을 할당받아 사용한다.

컨테이너

  • 컨테이너는 호스트 운영체제 위에서 동작한다. 다시 말해, 운영체제 수준 가상화 기술을 사용해 호스트 운영체제 위에 격리된 실행 환경을 만든다.
  • 이처럼 격리된 실행 환경을 컨테이너라고 하며 각 컨테이너는 독립된 파일 시스템, 네트워크 인터페이스, 프로세스 등을 기반으로 동작한다.
  • 컨테이너에는 자체적인 게스트 운영체제가 없고 호스트 운영체제의 자원을 공유받아 실행하므로 웹 애플리케이션을 더 빠르게 실행하고, 본 시스템의 물리적인 자원을 더 효율적으로 활용한다.

가상머신(왼쪽)과 컨테이너(오른쪽) 차이점 사진

 

컨테이너를 사용하는 이유

  • 컨테이너는 여러 개의 서버가 필요한 상황에서 각 서버를 독립적으로 운영하는 효과를 내기 위해 사용한다.
    • 장점
      • 하나의 서버로 다양한 용도와 환경, 기능을 충족해야 할 때 여러 개의 컨테이너로 나눠 구현할 수 있다.
      • 각 서버가 컨테이너별로 관리되므로 소프트웨어나 라이브러리를 설치할 때 의존성을 고려하지 않아도 되고, 컨테이너별로 소프트웨어를 간단히 설치할 수 있다.

 

3. 컨테이너 플랫폼 : 도커 (Docker)

(1) 도커의 개념

도커(Docker)는 컨테이너 기술을 이용해 웹 애플리케이션을 배포하고 실행하는 오픈 소스 플랫폼이다. 도커는 웹 애플리케이션을 실행하는 데 필용한 모든 환경을 패키징해 컨테이너 이미지로 만들고, 이 이미지를 이용해 컨테이너를 생성한다.

 

예를 들어 자바와 스프링 부트로 개발한 웹 애플리케이션이 있다면, 이 웹 애플리케이션을 만들고 실행하는데 필요한 요소 (JDK, JAR 파일 등)를 포함해 하나의 이미지로 만든 후, 이 이미지를 활용해 컨테이너를 생성하고 해당 컨테이너에서 웹 애플리케이션을 실행한다.

 

 

(2) 도커의 구조

도커의 구조는 크게 클라이언트와 서버로 나뉜다. 사용자가 도커 클라이언트를 통해 'docker'로 시작되는 도커 명령어를 입력하면 도커 호스트(도커 서버)의 도커 데몬(도커 엔진)에 명령어가 전달되어 컨테이너 생성 및 실행, 컨테이너 이미지 관리  등의 작업이 수행된다.

출처 : https://docs.docker.com/get-started/overview/#docker-architecture

 

도커 클라이언트와 도커 데몬은 API를 통해 요청을 주고 받는다. 도커 클라이언트는 개발자가 API를 사용해 명령어를 내릴 수 있도록 CLI(Command Line Interface) 환경을 제공한다.

도커 데몬은 API로 들어온 명령어를 수행하는데, 이때 도커드(dockerd)라는 프로세스를 통해 동작한다. 도커드는 컨테이너와 컨테이너 이미지 관리의 주체이다.

도커 허브(Docker Hub)와 같은 컨테이너 레지스트리(Container Registry)에서 이미지를 가져온다.

 

 

(3) 컨테이너 이미지

컨테이너 이미지는 컨테이너 실행에 필요한 모든 것이 포함된 패키지로, 웹 애플리케이션 실행에 필요한 모든 소스 코드, 런타임, 라이브러리, 환경 변수 등의 구성 요소가 들어 있습니다. 컨테이너 이미지는 한 번 만들면 다른 서버 환경에서도 동일하게 사용할 수 있어 호환성이 좋다.

 

컨테이너 이미지를 만들고 이를 이용해 컨테이너를 실행하는 과정은 아래 그림과 같이 진행된다.

 

도커 이미지는 도커 파일(Docker file) 이라는 텍스트 파일을 이용해 만든다. 도커 파일에는 웹 애플리케이션의 구성과 실행 방법을 정의하는 명령어가 작성되어 있으며, 이를 빌드하면 도커 이미지가 생성되고 도커 이미지를 실행하면 컨테이너가 실행된다.

 

 

4. 컨테이너 오케스트레이션

도커가 상용화되면서 컨테이너와 이를 운영하는 서버 컴퓨터가 늘어나 거대한 서버 클러스터 (server cluster, 여러 서버를 하나의 시스템으로 묶은 것)가 형성되었다.

이러한 서버 클러스터에서 다수의 컨테이너를 관리하는 프로세스를 컨테이너 오케스트레이션(container orchestration)이라고 한다.

컨테이너는 웹 애플리케이션을 실행하는 데 사용하는 경량의 가상화된 환경이고, 컨테이너 오케스트레이션은 이러한 컨테이너의 생성, 배포, 관리, 확장을 자동화하는 데 사용하는 도구이다.

대표적인 컨테이너 오케스트레이션에는 쿠버네틱스(Kubernetes), 도커 스웜(Docker Swarm), 아파치 메소스(Apache Mesos) 등이 있다.

반응형

'Knowledge > 이론' 카테고리의 다른 글

String vs StringBuffer vs StringBuilder  (0) 2024.06.13
CI / CD  (0) 2024.06.12
클라우드 컴퓨팅  (0) 2024.06.12
API  (0) 2024.06.12
DBMS  (0) 2024.06.12