도커(Docker)란?

Minsang Yu·2023년 5월 19일
0

도커란

  • 도커는 컨테이너 가상화 플랫폼으로, 애플리케이션의 배포, 관리, 실행을 단순하고 효율적으로 할 수 있도록 도와줍니다.
  • 컨테이너라는 단위로 애플리케이션과 해당 애플리케이션을 실행하는 데 필요한 모든 종속성을 포장합니다.
  • 도커를 사용하면 개발자는 애플리케이션을 컨테이너로 패키징하고,, 이 컨테이너를 호스트 환경에서 실행할 수 있습니다.

도커엔진(Docker engine)

컨테이너를 관리하고 실행하는 핵심 구성 요소로 도커엔진은 컨테이너 생성, 실행, 중지, 삭제 등의 작업을 수행하며, 컨테이너 간의 상호작용과 리소스 관리를 담당합니다.
1. 도커 데몬(Docker Demon)
도커 데몬은 도커 서비스를 백그라운드에서 실행하는 프로세스입니다. 도커 API를 통해 도커 컨테이너와 상호작용 하며, 도커 이미지의 빌드, 컨테이너의 생성, 실행, 중지, 삭제 등을 처리합니다.

2. 도커 클라이언트
도커 클라이언트는 도커 데몬과 통신하여 사용자의 명령을 전달하고 결과를 반환합니다. 도커 CLI를 통해 도커 멸령어를 입력하여 도커 엔진과 상호작용 할 수 있습니다.

3. 도커 이미지
도커 이미지는 애플리케이션과 해당 애플리케이션을 실행하는 데 필요한 모든 종속성을 포함하는 패키지입니다. 도커 이미지는 읽기 전용이며, 도커 컨테이너의 기반이 됩니다. 도커 이미지는 Dockerfile을 사용하여 정의하고, 도커 빌드 명령을 통해 생성할 수 있습니다.

4. 도커 컨테이너
도커 컨테이너는 도커 이미지를 실행한 상태로, 격리된 환경에서 애플리케이션을 실행합니다. 각 도커 컨테이너는 자체 파일 시스템, 네트워크, 프로세스 공간을 가지며, 호스트 시스템과 격리되어 독립적으로 실행됩니다. 도커 컨테이너는 가볍고 빠르게 생성 및 시작할 수 있으며, 확장성과 이식성이 우수합니다.

가상머신(Virtual Machine) vs 도커 컨테이너(Docker Container)

가상머신과 도커 컨테이너는 둘다 가상화 기술을 사용하여 애플리케이션을 실행하는 방식이지만, 그 구조와 동작 방식에 차이가 있습니다.

가상머신


기존의 가상화 기술인 가상머신은 하이퍼바이저를 이용해 여러개의 운영체제를 하나의 호스트에서 생성해서 사용하는 방식입니다.

가상머신은 호스트 시스템(물리적인 서버나 컴퓨터)위에 가상의 하드웨어 계층을 에뮬레이션하여 독립적인 가상 환경을 생성합니다. 각 가상머신은 운영 체제를 포함하여 애플리케이션을 실행하는데 필요한 모든 소프트웨어와 라이브러리를 가지고 있습니다.

각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생합니다.

그 뿐 아니라 가상머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함 하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 떄 이미지의 크기 또한 커집니다.

정리

  • 가상머신은 하이퍼바이저를 통해 여러개의 운영체제를 생성되고 관리됨(Guest OS)
  • 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 Hyper Visor를 거치므로 -> 성능 손실이 큼
  • 가상머신은 Guet OS를 사용하기 위한 라이브러리, 커널 등을 포함하므로 -> 배포할떄 용량이 크다

하이퍼바이저

  • 하이퍼바이저(Hypervisor)는 가상화 환경을 구축하고 관리하는 소프트웨어 레이어입니다. 하이퍼바이저는 호스트 시스템(물리적인 서버나 컴퓨터)에서 가상머신을 생성하고 실행하는 역할을 담당합니다.
  • 하이퍼바이저는 가상머신(VM)을 생성하고 각 VM에 대한 리소스 할당, 가상 하드웨어 관리, 네트워크 연결 등을 처리합니다. 각 가상머신은 독립된 운영 체제와 애플리케이션을 실행하는 데 필요한 리소스를 할당받습니다. 이를 통해 하나의 호스트 시스템에서 여러 개의 가상 환경을 병렬로 실행하고, 서로 간섭하지 않도록 격리된 환경을 제공할 수 있습니다.

도커 컨테이너

  • 도커 컨테이너는 호스트 시스템의 운영체제와 커널을 공유하며, 운영 체제 수준의 가상화를 제공합니다.
  • Linux커널과 Cgroups및 네임스페이스 등 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행할 수 있습니다.
  • 이러한 독립성은 컨테이너의 본래목적인데 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지 할 수 있습니다.
  • 도커를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공합니다.
  • 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있습니다.
  • 도커는 이런 컨테이너 환경 내에서 애플리케이션 배포를 자동화 합니다.

컨테이너를 사용해야 하는 이유
가상머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS커널에서 직접 구동합니다. 컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지합니다.

profile
Jr. DataEngineer

0개의 댓글