가상화와 Docker

Suhyeon Lee·2025년 8월 15일

가상화란? 포스트 내용 정리

가상화

  • 가상화(假像化, virtualization)
    • 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어
    • 다중 논리 리소스로서의 기능을 하는 것처럼 보이는 서버, 운영 체제, 응용 프로그램, 또는 저장 장치와 같은 하나의 단일 물리 리소스를 생성하는 것
    • 아니면 단일 논리 리소스처럼 보이는 저장 장치나 서버와 같은 여러 개의 물리적 리소스를 만들어 낼 수 있음
  • 다시 말해, 가상화는 하나의 실물 컴퓨팅 자원을 마치 여러 개인 것처럼 가상으로 쪼개서 사용하거나, 여러 개의 실물 컴퓨팅 자원들을 묶어서 하나의 자원인 것처럼 사용하겠다는 것
    • 이때 컴퓨팅 자원(리소스)이란, CPU, 메모리, 스토리지, 네트워크 등 컴퓨터를 구성하는 요소들을 말함
    • 클라우드 컴퓨팅의 기반이 되는 주요 개념 중 하나
    • 클라우드 컴퓨팅에서 가상화란 운영 체제(OS) 내에서 가상 머신을 생성해주는 하드웨어 가상화를 의미

종류

  1. 데이터 가상화
    • 데이터 처리 역량 확보
      • 여러 곳에 분산된 데이터를 단일 소스로 통합
      • 데이터를 동적 공급 요소로 다루어 여러 소스에서 데이터를 동시에 가져오고 새로운 데이터 소스를 손쉽게 통합하며 사용자의 요구에 따라 데이터 변환하여 필요한 데이터를 필요한 형식으로 적시에 애플리케이션 또는 사용자에게 제공
  2. 데스크탑 가상화
    • 운영체제 가상화와 혼동하기 쉬움
    • 설정, 업데이트, 보안 점검 동시 수행
      • 시뮬레이션된 데스크탑 환경이 중앙 관리자 또는 자동화된 관리 툴을 통해 수백 개의 물리 머신에 동시 배포되도록 지원
      • 각 머신에서 물리적으로 설치, 설정, 업데이트되는 기존의 데스크탑 환경과 달리 데스크탑 가상화는 관리자가 모든 데스크탑에서 설정, 업데이트, 보안 점검을 대규모로 수행 가능
  3. 서버 가상화
    • 서버 기능 극대화
      • 서버는 대량의 특정 태스크를 효과적으로 처리해 노트북, 데스크탑 등의 다른 컴퓨터가 다양한 태스크를 처리할 수 있도록 하는 컴퓨터
      • 서버를 가상화하면 이러한 특정 기능을 더 많이 수행 가능
      • 서버 파티셔닝을 통해 구성 요소로 여러 기능을 지원
  4. 운영 체제 가상화
    • 여러 OS를 동시에 실행 가능
      • 운영 체제 가상화는 운영 체제의 중앙 태스크 관리자인 커널에서 이루어지므로 Linux 환경과 Windows 환경 등을 함께 실행 가능하다.
    • 하드웨어 비용 감소
      • 컴퓨터에 고도의 OOTB (Out Of The Box) 기능이 필요하지 않음
    • 보안 강화
      • 모든 가상 인스턴스를 모니터링하고 격리 가능
    • 시간 절약
      • 소프트웨어 업데이트와 같은 IT 서비스의 소요시간 감소
  5. 네트워크 기능 가상화
    • 디렉터리 서비스, 파일 공유, IP 설정과 같은 네트워크의 주요 기능을 분리하여 환경에 배포
    • 소프트웨어 기능이 속해 있는 물리 머신으로부터 기능을 분리하면 특정 기능을 새 네트워크에 함께 패키징하고 이를 환경에 할당 할 수 있음
    • 네트워크를 가상화하면 스위치, 라우터, 서버, 케이블, 허브 등 여러 개의 독립적인 네트워크를 생성하는 데 필요하며 통신 산업에서 일반적으로 사용되는 물리 구성 요소가 줄어듦

Docker의 개념 및 핵심 설명 포스트 내용 정리

Docker

  • Go 언어로 작성된 LXC(Linux Containers; 리눅스 컨테이너) 기반 오픈 소스 가상화 플랫폼
    • Docker 0.9 버전부터는 독립적인 자체 컨테이너 관리 라이브러리인 libcontainer를 도입해 사용
      • 플랫폼 독립성: libcontainer는 Go 언어로 작성되어 다양한 운영체제에서 사용 가능하며, 특정 Linux 커널 기능에 종속되지 않음
      • 향상된 유연성: libcontainer는 Docker가 컨테이너를 더 유연하게 관리하고 제어할 수 있음
      • 보안 강화: libcontainer는 보안 측면에서 더 강화된 기능을 제공

OS 가상화(Virtual Machine, VM) vs 컨테이너 가상화(Docker)

  • 한 서버의 여러 OS를 가상화 하여 사용하는 것과 컨테이너 방식으로 프로세스를 격리시켜 동작하는 방법은 어떤 차이점이 있을까?
    • VM은 Host OS 위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS를 올려 사용 → OS 가상화
      • 가상화된 하드웨어 위에 OS가 올라가는 형태
      • 거의 완벽하게 Host와 분리됨 → Host OS와 완전히 분리되는 장점은 있지만 OS 위에 OS를 올리기 때문에 무겁고 느릴 수밖에 없음
    • 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올라감
      • Host OS 그리고 Docker 엔진 위에서 바로 동작하며 Host의 커널을 공유함 → 커널을 공유하게 되면 io 처리가 쉽게 되어 성능의 효율을 높일 수 있음
      • 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것
  • OS 가상화는 컨테이너 기반 가상화보다 더 높은 격리 레벨을 지원합니다. 이는 보안적인 측면에서 더욱 유리합니다. 또한 OS 가상화(VM)는 커널을 공유하지 않으므로 멀티 OS가 가능하다는 장점이 있슴니다.
  • 컨테이너 가상화는 커널을 공유하기 때문에 호스트와 동일한 OS 계열만 지원한다(커널을 공유하는 특징 때문에 멀티 OS 환경을 본질적으로 지원하지 않음). 즉, Linux 위에 Windows 컨테이너를 올리는 것은 불가능합니다.
    • Windows 위에서 Linux 컨테이너를 실행하려면 WSL2(Windows Subsystem for Linux 2)같은 하위 시스템이나 가상화 계층이 필요
    • 컨테이너는 커널을 공유(=커널을 분리하지 않기 때문에)하므로, 호스트와 같은 종류의 OS만 컨테이너로 올릴 수 있습니다. 즉, 리눅스 커널 위 도커는 리눅스 기반 컨테이너만, 윈도우는 윈도우용 컨테이너만 동작합니다.
  • 그럼에도 Docker를 쓰는 이유는 성능 향상, 뛰어난 이식성, 쉽게 Scale Out을 할 수 있는 유연성 때문입니다.

예시로 보는 차이점

1. VM(Virtual Machine) 예시

  • VMware, VirtualBox 등 활용
  • 예시: 리눅스 서버에서 Windows VM, Ubuntu VM, CentOS VM 등 여러 OS를 동시에 실행 가능

2. Docker(컨테이너) 예시

  • Docker는 호스트 OS 커널을 공유
  • 예시: Ubuntu 리눅스 서버에서 Ubuntu, CentOS, Alpine 등 여러 리눅스 배포판 컨테이너는 가능 but Windows 컨테이너는 불가 (윈도우 커널이 없기 때문)
  • Windows Docker 호스트에선 기본적으로 윈도우 컨테이너만 동작
    • WSL2 같은 리눅스 커널 호환 백엔드가 있으면 윈도우 환경에서도 리눅스 커널을 내부적으로 실행할 수 있음

정리

  • VM(하이퍼바이저 기반 OS 가상화): 커널 공유 없음 → 멀티 OS 가능(격리 강함, 무겁다)
  • Docker(컨테이너 가상화): 커널 공유 → 동일 커널의 OS 컨테이너(호스트 OS와 같은 계열)만 가능(격리 약함, 가볍다)
OS 가상화(VM)컨테이너 가상화(Docker)
기본 구조하이퍼바이저 위에 각 VM이 독립된 게스트 OS를 가짐호스트 OS의 커널을 공유, 그 위에 여러 컨테이너를 실행
커널 공유 여부커널을 공유하지 않음 (각 VM마다 별도 커널)커널을 공유함 (호스트의 커널)
멀티 OS 가능 여부가능 (윈도우 호스트 위에 리눅스 게스트 OS VM, 반대도 가능)불가능 (호스트 커널과 동일한 계열 OS만 사용 가능, 예: 리눅스 호스트면 리눅스 기반 컨테이너만)
격리 수준높음 (OS 단위 전체 격리)낮음 (커널 레벨에서만 격리)
자원 요구량큼 (OS 전체 구동)적음 (프로세스 수준 구동)
부팅 속도느림 (수분 소요)빠름 (수 초)
  • Windows에서 Linux용 Docker 이미지 실행 가능 조건
    • WSL2(Windows Subsystem for Linux 2) 또는 Hyper-V 기반의 Docker Desktop을 사용하면, 윈도우 환경에서도 리눅스 커널을 내부적으로 실행하게 됩니다.
    • 이 구조 덕분에 윈도우에서 실제로 리눅스 컨테이너 이미지를 거의 그대로 받아 실행할 수 있게 되는 것입니다.
    • Docker Desktop 환경에서는 기본적으로 WSL2(최근 권장 방식)를 백엔드 엔진으로 사용하도록 설정되어 있으며, 이렇게 하면 Docker Hub에서 받은 리눅스 기반 이미지를 바로 실행할 수 있습니다.
    • 주의할 점
      • Docker Desktop의 "컨테이너 엔진"을 리눅스로 설정해야 리눅스 이미지를 실행할 수 있습니다.
      • Windows 컨테이너와 Linux 컨테이너를 동시에 실행할 수는 없습니다. 두 모드 간 수동 전환이 필요합니다.
      • 기본적으로 받은 이미지는 대부분 리눅스용이기 때문에, 윈도우에서 Docker Desktop/WSL2 기반 환경이면 바로 실행해도 됩니다.
    • 결론
      • 대부분의 경우, 윈도우에서 도커를 쓴다면 WSL2 같은 리눅스 커널 호환 백엔드가 있기 때문에 리눅스용 이미지를 그대로 실행할 수 있습니다.
      • 단, 도커 엔진 모드가 "Linux"여야 하며, "Windows 컨테이너" 모드에서는 동작하지 않습니다.

Docker Image

  • Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것
    • Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 됨

이미지는 어떻게 만들어지나요?

  • ubuntu 이미지를 만들기 위해 Layer A,B,C가 들어감
  • 그럼 nginx 이미지를 만든다고 생각했을땐 어떻게 될까?
    • 이미 Layer A,B,C로 만들어진 ubuntu 이미지를 베이스 이미지로 사용하여 베이스 이미지에 nginx만 더하게 된다.
    • 그렇다면 실질적으로 Layer A, B, C, nginx 가 더해진 것이지만 과정은 unbuntu + nginx가 더해진 것
  • 그렇다면 web app 이미지를 만들려고 할 땐 어떻게 될까?
    • ubuntu 이미지에 nginx를 올리고 web app을 올리는 것이 아닌 이미 만들어진 nginx 베이스 이미지에 web app을 올려 이미지를 만듦

Docker File

  • Docker File은 이미지 생성 출발점
    • 이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성할
    • Docker File을 읽을 수 있다면 해당 이미지가 어떻게 구성되어 있는지도 알 수 있다는 의미

Docker Hub & Docker Registry

  • Docker Hub에서는 이미지를 저장하고 관리
    • 많은 회사들이 Docker Hub를 통해 소프트웨어를 배포하기 시작했고 공개 이미지들을 공유할 수 있음
    • Docker Hub를 이용하면 손쉽게 imaer를 pull 받아 컨테이너에 적용 시킬 수 있음 (사실 GitHub와 동일하게 생각해도 무관함)
  • Docker Registry는 Docker Hub처럼 공개된 방식이 아닌 비공개적으로 격리된 저장소를 구축하는 것

profile
2 B R 0 2 B

0개의 댓글