Docker 개념1: 가상화, 컨테이너, 가상 머신의 이해

손지민·2024년 5월 9일

Docker

목록 보기
2/9
post-thumbnail

개요

도커 사용 전 도커가 무엇인지, 왜 쓰는지를 이해하기 위한 사전 지식으로 가상화 기술을 이해하고, 컨테이너, 가상 머신을 비교하며 도커를 깊이 이해하고자 합니다.

이 글은 Docker 를 이해하기 위한 아래의 개념들을 하나씩 짚어가며 더 깊이 이해할 수 있도록 작성해보았습니다.

  • 도커란?
  • 컨테이너란?
  • 가상화란?
  • 가상머신이(VM)란?
  • 컨테이너와 VM 비교
  • 도커 파일/도커 이미지/도커 컨테이너/3가지 사이의 관계

<요약>
전체 흐름 파악 전 가볍게 설명하면 도커는 주어진 자원을 분리, 격리하여 애플리케이션을 독립된 환경에서 실행하고 관리할 목적으로 사용하는 도구입니다. 이를 통해 개발자들은 환경을 일관되게 유지하고 애플리케이션을 쉽게 배포하고 실행할 수 있게 합니다.

개념

Docker란?

  • 컨테이너 기반 가상화 도구

Docker란 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술입니다.
여기서 컨테이너가상화 두 가지 개념이 또 필요합니다.

컨테이너란?

  • 가상화 기술 중 하나

설명:

  • 애플리케이션과 애플리케이션을 실행하는 데 필요한 모든 소프트웨어 및 설정을 패키지화하는 기술입니다.
    쉽게 표현하면 애플리케이션과 애플리케이션에 필요한 모든 것을 묶어서(격리해서) 다른 환경과 독립적으로 실행될 수 있도록 묶어주고 다른 환경에서도 동일한 방식으로 실행될 수 있도록 하는 기술입니다.

이를 통해

  • 여러 애플리케이션을 단일 호스트에서 실행할 수 있습니다.
  • 애플리케이션을 쉽게 이동하고 확장할 수 있습니다.
  • 일관된 환경에서 실행되어 개발, 배포 및 관리를 간소화합니다.
  • Docker, Kubernetes 등이 대표적인 컨테이너 기술입니다.

가상화 기술이란?

가상화 기술은 하드웨어 자원을 하나 이상의 가상 환경으로 분할하여 여러 개의 독립적인 가상 시스템을 운영할 수 있도록 하는 기술을 말합니다.

  • 가상화 유형
    • 메모리 가상화
    • 하드웨어 가상화
    • 데이터 가상화
    • 데스크탑 가상화
    • 서버 가상화
    • 운영 체제 가상화
    • 네트워크 기능 가상화
  • 가상화로 할 수 있는 작업 예시
    • 네트워크 기능 가상화: 한 개의 원래 네트워크로부터 가상의 격리된 네트워크를 생성할 수 있습니다.
    • 서버 가상화: 단일 서버를 수백 개에 달하는 복수의 서버처럼 사용할 수 있습니다.
    • 운영 체제 가상화: 컴퓨터 한 대로 여러 가지 다른 운영 체제를 실행할 수 있습니다.

가상 머신이란?

하이퍼바이저(Hypervisor)를 사용하여 하드웨어를 가상화(격리, 분리)하고, 이렇게 생성된 각각의 독립적인 환경이 가상 머신이 되는 것입니다.
가상 머신은 각각이 자체적인 운영 체제와 응용 프로그램을 실행할 수 있는 독립적인 가상 환경을 제공합니다. 이는 물리적 서버의 리소스를 여러 개의 가상 머신으로 분할하여, 각 가상 머신이 독립적으로 운영되도록 해줍니다.

!! 하드웨어를 분리하여 격리된 환경을 만든다!!

컨테이너와 VM 비교

  • 쉽게 말하면
    • 가상 머신은 하이퍼바이저를 통해 하드웨어를 가상화(격리, 분리)하는 것
    • 컨테이너는 운영체제의 리소스를 가상화(격리, 분리)하는 것

격리하는 레벨이 다르다고 생각하면 이해하기 쉬울 듯합니다.

컨테이너는 운영 체제를 가상화하여 애플리케이션이 모든 플랫폼에서 독립적으로 실행될 수 있도록 합니다. 가상 머신은 그 이상의 기능을 제공하여 물리적 시스템을 가상화할 수 있도록 합니다. 따라서 하드웨어 리소스를 효율적으로 사용할 수 있게 됩니다. 아래에 몇 가지 차이점이 더 나와 있습니다.

  1. 작동 방식
    1.1. 컨테이너 기술에는 실행 중인 시스템에 관계없이 일관되게 수행되는 자급자족 소프트웨어 패키지를 빌드하는 작업이 포함됩니다. 소프트웨어 개발자는 컨테이너 이미지, 즉 애플리케이션을 실행하는 데 필요한 정보가 들어 있는 파일을 만들고 배포합니다. 컨테이너 이미지는 읽기 전용이며 컴퓨터 시스템에서 변경할 수 없습니다.
    1.2. 가상 머신 기술에는 물리적 서버 또는 컴퓨터에 가상화 소프트웨어를 설치하는 작업이 포함됩니다. 이 물리적 컴퓨터를 호스트 컴퓨터라고 하며 가상 머신을 게스트라고 합니다. 호스트 운영 체제에 영향을 미치지 않으면서 필요에 따라 게스트 운영 체제와 그 애플리케이션을 구성하고 업데이트할 수 있습니다.

  2. 핵심 기술
    2.1. 가상 머신은 게스트 운영 체제와 호스트 운영 체제 간에 통신하는 하이퍼바이저를 사용합니다. 이 하이퍼바이저가 리소스 공유를 조정하므로 가상 머신은 동일한 하드웨어에서 여러 개의 다른 가상 머신과 함께 독립적으로 실행됩니다.
    2.2. 반면, 컨테이너는 컨테이너 엔진 또는 컨테이너 런타임을 사용합니다. 컨테이너 엔진은 컨테이너와 운영 체제 간의 중개 에이전트 역할을 하며 애플리케이션에 필요한 시스템 리소스를 제공하고 관리합니다. 도커는 가장 인기 있는 오픈 소스 컨테이너 엔진입니다.

  3. 크기 차이
    3.1. 가상 머신 이미지 파일에는 자체 운영 체제가 포함되어 있으므로 크기가 더 큽니다(수 GB). 리소스가 증가하면 전체 서버, 데이터베이스, 데스크톱 및 네트워크를 복제, 분할, 추상화, 에뮬레이트할 수 있습니다.
    3.2. 컨테이너 파일은 더 가볍고 MB 단위입니다. 컨테이너는 단일 애플리케이션을 실행하는 데 필요한 리소스만 패키징합니다. 그래서 컨테이너가 더 빠릅니다.

<중요!!이해를 위한 예시!>

"물리적 서버의 리소스" 란 물리적인 하드웨어에서 사용 가능한 여러 가지 자원을 말합니다.

  1. 가상 머신(Virtual Machine)의 리소스 가상화:
    가상 머신은 하이퍼바이저를 사용하여 물리적 서버의 리소스를 분리하고 각각의 가상 머신에 할당해요. 각 가상 머신은 자체적인 운영 체제와 필요한 모든 라이브러리 및 응용 프로그램을 포함하고 있어요. 따라서 각 가상 머신은 가상화된 하드웨어 상에서 독립적으로 작동합니다. 예를 들어, 가상 머신 A에는 4개의 CPU 코어와 8GB의 RAM을 할당하고, 가상 머신 B에는 2개의 CPU 코어와 4GB의 RAM을 할당할 수 있어요.

  2. 컨테이너(Container)의 리소스 가상화:
    컨테이너는 호스트 운영 체제의 리소스를 공유하며 실행됩니다. 각 컨테이너는 동일한 호스트 운영 체제 커널을 공유하면서 격리된 실행 환경을 제공합니다. 이 격리는 프로세스 수준에서 이루어지며, 각 컨테이너는 필요한 라이브러리 및 응용 프로그램만을 포함하고 있어요. 따라서 각 컨테이너는 더 가볍고 빠르며 더 적은 자원을 소비합니다.

가상 머신의 경우, 각각의 가상 머신은 고정된 CPU 및 RAM 자원을 할당받아 독립적으로 실행되지만, 컨테이너의 경우에는 호스트 운영 체제에서 사용 가능한 리소스를 필요에 따라 동적으로 할당받아 공유하며 사용됩니다. 이것이 컨테이너가 더 가볍고 빠르며 효율적으로 자원을 사용할 수 있는 이유 중 하나입니다.

<핵심>컨테이너와 가상 머신

컨테이너가상머신
정의애플리케이션의 코드, 라이브러리 및 애플리케이션 실행 환경을 구성하는 기타 종속 구성 요소가 포함된 소프트웨어 코드 패키지입니다.물리적 시스템의 디지털 복제본입니다. 물리적 하드웨어를 여러 환경으로 분할합니다.
가상화운영 체제를 가상화합니다.기반 물리적 인프라를 가상화합니다.
캡슐화애플리케이션 또는 애플리케이션 구성 요소를 실행하는 데 필요하며 운영 체제보다 상위에 있는 소프트웨어 계층입니다.운영 체제, 그 위의 모든 소프트웨어 계층, 그리고 여러 애플리케이션을 포함합니다.
기술컨테이너 엔진(Docker)은 기반 운영 체제와 리소스를 조율합니다하이퍼바이저는 기반 운영 체제 또는 하드웨어와 조율됩니다.
크기더 작습니다(MB 단위).훨씬 더 큽니다(GB 단위).
제어컨테이너 외부 환경에 대한 제어 권한이 적습니다.전체 환경을 보다 효과적으로 제어할 수 있습니다.
유연성더 유연합니다. 온프레미스 환경과 클라우드 중심 환경 간에 신속하게 마이그레이션할 수 있습니다.유연성이 떨어집니다. 마이그레이션에 어려움이 있습니다.
확장성확장성이 뛰어납니다. 마이크로서비스를 통해 세분화된 확장이 가능합니다.확장하는 데 비용이 많이 들 수 있습니다. 비용 효율적인 확장을 위해서는 온프레미스에서 클라우드 인스턴스로 전환해야 합니다.

출처

profile
Developer

0개의 댓글