Backend study/Backend theory

가상화와 컨테이너

adulty22 2024. 9. 3. 13:47

가상화와 컨테이너는 현대 IT 인프라에서 핵심적인 기술이다. 이 기술들은 컴퓨팅 자원의 효율성을 극대화하고, 애플리케이션의 배포와 관리를 단순화하며, 개발과 운영의 일관성을 높이기 위해 사용된다.

 

1. 가상화의 개념

가상화(Virtualization)는 물리적인 컴퓨팅 자원을 추상화하여 논리적인 단위로 분리하는 기술이다. 이를 통해 하나의 물리적 하드웨어 자원에서 여러 개의 가상 컴퓨팅 환경(가상 머신)을 생성하고 운영할 수 있다. 가상화는 자원의 효율적인 활용, 유지보수의 용이성, 확장성 등을 제공하기 위해 도입되었다.

 

2. 가상화의 종류

가상화는 다양한 유형으로 나눌 수 있으며, 각 유형은 다르게 자원을 추상화하고 관리한다.

1) 하드웨어 가상화 (Hardware Virtualization)

하드웨어 가상화는 물리적 서버를 여러 개의 가상 머신(VM, Virtual Machine)으로 분할하는 기술이다. 각 가상 머신은 자체 운영체제와 애플리케이션을 실행할 수 있으며, 물리적 하드웨어의 일부 자원을 독립적으로 할당받는다. 하이퍼바이저(Hypervisor)가 가상화 계층에서 이러한 가상 머신을 관리한다.

  • 하이퍼바이저(Hypervisor): 가상 머신을 생성하고 관리하는 소프트웨어이다. 하이퍼바이저는 두 가지 유형으로 나뉜다:
    • Type 1 하이퍼바이저: 베어 메탈 하이퍼바이저로, 직접 물리적 하드웨어 위에서 실행된다. 예: VMware ESXi, Microsoft Hyper-V, KVM.
    • Type 2 하이퍼바이저: 호스트 운영체제 위에서 실행되는 하이퍼바이저로, 소프트웨어 계층에서 가상 머신을 관리한다. 예: Oracle VirtualBox, VMware Workstation.

2) 서버 가상화 (Server Virtualization)

서버 가상화는 하나의 물리적 서버를 여러 개의 논리적 서버로 분할하는 기술이다. 이를 통해 서버 자원을 효율적으로 사용하고, 서버 통합을 가능하게 한다.

  • 예시: 물리적 서버에서 여러 가상 머신을 실행하여 각각의 가상 머신이 독립된 서버처럼 동작하도록 한다.

3) 네트워크 가상화 (Network Virtualization)

네트워크 가상화는 물리적 네트워크 자원을 추상화하여 논리적 네트워크를 구성하는 기술이다. 네트워크 기능 가상화(NFV)와 소프트웨어 정의 네트워크(SDN)가 이에 해당한다.

  • NFV(Network Function Virtualization): 방화벽, 라우터, 스위치 등 네트워크 장비의 기능을 가상화하여 소프트웨어로 구현한다.
  • SDN(Software-Defined Networking): 네트워크 제어와 데이터 전달을 분리하여 네트워크를 중앙에서 관리하고, 프로그래밍할 수 있게 한다.

4) 스토리지 가상화 (Storage Virtualization)

스토리지 가상화는 여러 물리적 스토리지를 하나의 논리적 스토리지 풀로 통합하여 관리하는 기술이다. 이를 통해 스토리지 자원의 효율적인 사용과 중앙집중 관리가 가능하다.

 

3. 컨테이너의 개념

컨테이너(Container)는 가상화의 한 형태로, 애플리케이션과 그 실행 환경(라이브러리, 종속성 등)을 가볍고 독립적으로 패키징하는 기술이다. 컨테이너는 가상 머신과 달리, 전체 운영체제를 가상화하지 않고, 호스트 운영체제의 커널을 공유하며 독립된 프로세스 공간에서 실행된다.

컨테이너의 특징

  • 경량성: 컨테이너는 가상 머신보다 훨씬 가벼우며, 빠르게 시작되고 종료될 수 있다. 이는 컨테이너가 운영체제의 커널을 공유하기 때문이다.
  • 일관성: 개발 환경과 배포 환경이 동일한 컨테이너 이미지를 사용하므로, "내 로컬에서는 잘 되는데, 서버에서는 안 되는" 문제를 방지할 수 있다.
  • 이식성: 컨테이너는 한 환경에서 다른 환경으로 쉽게 이동할 수 있다. 예를 들어, 로컬에서 개발한 컨테이너를 클라우드나 데이터 센터로 바로 배포할 수 있다.

 

4. 도커(Docker)의 개념

도커(Docker)는 컨테이너 기술을 사용하는 오픈 소스 플랫폼으로, 애플리케이션을 컨테이너로 쉽게 패키징하고, 배포하고, 실행할 수 있게 해준다. 도커는 컨테이너 기술을 표준화하고, 이를 통해 소프트웨어의 개발과 배포를 효율적으로 관리할 수 있도록 지원한다.

도커의 구조

도커는 여러 구성 요소로 이루어져 있으며, 이들은 컨테이너의 생성, 실행, 관리를 담당한다:

  • 도커 데몬(Docker Daemon): 도커의 핵심 컴포넌트로, 컨테이너의 생성을 관리하고, 이미지를 빌드하며, 호스트 시스템에서 컨테이너를 실행한다. dockerd라는 프로세스가 이를 담당한다.
  • 도커 클라이언트(Docker Client): 사용자가 도커와 상호작용하는 명령줄 도구이다. 사용자는 docker run, docker build와 같은 명령어를 사용하여 도커 데몬과 통신한다.
  • 도커 이미지(Docker Image): 컨테이너를 생성하는 템플릿으로, 애플리케이션과 그 실행 환경을 포함한 읽기 전용 파일 시스템 스냅샷이다. 이미지는 레이어(layer)로 구성되며, 각 레이어는 이전 레이어를 기반으로 추가된다.
  • 도커 컨테이너(Docker Container): 도커 이미지로부터 생성된 실행 중인 인스턴스이다. 컨테이너는 이미지의 읽기 전용 레이어 위에 읽기-쓰기 레이어가 추가된 구조로, 독립적인 실행 환경을 제공한다.
  • 도커 레지스트리(Docker Registry): 도커 이미지를 저장하고 배포하는 서버이다. 공용 도커 레지스트리로는 Docker Hub가 있으며, 사용자는 자신의 프라이빗 레지스트리를 운영할 수도 있다.

도커의 동작 방식

  1. 이미지 생성: 도커 파일(Dockerfile)을 작성하여 애플리케이션과 그 환경을 정의한다. docker build 명령어로 도커 이미지를 생성한다.
  2. 이미지 저장: 생성된 이미지는 도커 레지스트리(Docker Hub 또는 프라이빗 레지스트리)에 저장된다.
  3. 컨테이너 실행: docker run 명령어로 이미지를 기반으로 컨테이너를 생성하고 실행한다.
  4. 컨테이너 관리: 실행 중인 컨테이너를 모니터링하고, 필요시 중지하거나 삭제할 수 있다.

 

5. 컨테이너 이미지

컨테이너 이미지는 컨테이너의 실행 환경을 포함한 불변의 파일 시스템이다. 이미지에는 애플리케이션, 종속성, 시스템 도구, 설정 파일 등이 포함되어 있다. 이미지는 계층화된 구조로 되어 있으며, 각 계층은 변경 사항을 포함하고 있다.

  • 레이어(Layer): 각 레이어는 불변이며, 새로운 레이어는 이전 레이어 위에 추가된다. 레이어는 재사용 가능하므로, 여러 이미지가 동일한 레이어를 공유하여 저장 공간을 절약할 수 있다.
  • Dockerfile: 도커 이미지를 빌드하기 위한 스크립트 파일이다. Dockerfile에는 이미지를 빌드하는 과정에서 수행해야 할 명령어들이 순차적으로 나열되어 있다.

 

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

컨테이너 오케스트레이션(Container Orchestration)은 다수의 컨테이너를 관리하고, 확장하며, 배포하는 작업을 자동화하는 기술이다. 이는 대규모 애플리케이션이나 마이크로서비스 아키텍처에서 특히 중요하다. 오케스트레이션 도구는 컨테이너의 라이프사이클을 관리하고, 필요한 리소스를 자동으로 할당하며, 컨테이너 간의 네트워크를 설정하고, 장애가 발생할 경우 복구 작업을 수행한다.

주요 오케스트레이션 도구

  1. Kubernetes
    • 가장 널리 사용되는 컨테이너 오케스트레이션 플랫폼이다. Kubernetes는 컨테이너의 배포, 확장, 운영을 자동화하며, 다양한 클라우드 환경에서 작동할 수 있다.
    • Pod: Kubernetes의 기본 실행 단위로, 하나 이상의 컨테이너가 포함될 수 있다.
    • ReplicaSet: 특정 수의 동일한 Pod를 유지하는 역할을 한다.
    • Service: Pod 간의 네트워크 트래픽을 관리하고, 외부 요청을 처리하는 네트워크 엔드포인트를 제공한다.
    • Ingress: 외부 HTTP 및 HTTPS 요청을 클러스터 내의 서비스로 라우팅하는 역할을 한다.
  2. Docker Swarm
    • 도커의 자체 컨테이너 오케스트레이션 도구로, 도커 클러스터를 쉽게 구성하고 관리할 수 있도록 한다. Docker Swarm은 Docker CLI와 자연스럽게 통합되며, 작은 규모의 오케스트레이션 작업에 적합하다.
  3. Apache Mesos & Marathon
    • Apache Mesos는 데이터 센터 내의 리소스를 관리하는 오픈 소스 플랫폼이며, Marathon은 Mesos 위에서 실행되는 컨테이너 오케스트레이션 도구이다. 주로 대규모 데이터 센터나 클라우드 환경에서 사용된다.

컨테이너 오케스트레이션의 필요성

  • 자동화된 배포: 수십, 수백 개의 컨테이너를 자동으로 배포하고, 관리할 수 있다.
  • 확장성: 수요에 따라 컨테이너의 수를 자동으로 늘리거나 줄일 수 있다.
  • 고가용성: 컨테이너가 실패했을 때, 자동으로 재시작하거나 다른 노드에 다시 배포하여 서비스의 가용성을 유지한다.
  • 리소스 관리: 오케스트레이션 도구는 클러스터 내의 리소스를 효율적으로 분배하고, 각 컨테이너가 필요한 리소스를 할당받도록 한다.

 

가상화와 컨테이너는 현대 IT 인프라의 핵심 기술로, 자원의 효율적인 사용과 애플리케이션의 일관된 배포를 가능하게 한다. 가상화는 물리적 자원을 논리적으로 분할하여 사용하는 기술이며, 컨테이너는 애플리케이션과 그 환경을 경량화된 단위로 패키징하는 기술이다. 도커는 컨테이너화의 대표적인 플랫폼으로, 도커 이미지를 기반으로 컨테이너를 생성하고 관리한다. 컨테이너 오케스트레이션은 대규모 컨테이너 환경을 관리하고, 확장하며, 자동화하는 데 필요한 도구들을 제공한다. 이러한 기술들을 잘 이해하고 활용하면, 더욱 효율적이고 유연한 IT 인프라를 구축할 수 있다

728x90