본문 바로가기

공부 자료/Kubernetes & Docker

[Docker] 컨테이너 기반 가상화 도구, 도커(Docker)

 

도커를 왜 사용할까?


Docker란?

  • 컨테이너 기반 가상화 도구
  • 애플리케이션을 컨테이너라는 느슨하게 격리된 환경에서 패키징하고 실행하는 기능
  • 애플리케이션을 인프라에서 분리해 소프트웨어를 신속하게 제공
  • 다양한 운영체제에서 사용할 수 있으며, 컨테이너화 된 애플리케이션을 쉽게 빌드 / 배포 / 관리 가능
  • 코드 작성과 프로덕션 환경 실행 사이의 지연 시간 절약 가능
  • 컨테이너를 제어할 수 있기 때문에 물리 머신을 놓지 않아도 컨테이너를 통해 다양한 물리 자원을 할당하고 실행하고 멈출 수 있으므로, 빠르게 배포하고 인프라 코드를 관리하는 것 처럼 할 수 있음

 

컨테이너란?

  • 가상화 기술 중 하나
  • 애플리케이션의 각 구성 요소에 의해 격리된 프로세스
  • 호스트 운영체제에 설치된 종속성에 의존하지 않으며, 격리되어 실행하기 때문에 호스트 및 기타 컨테이너에 미치는 영향이 최소화
  • 리눅스 커널의 기능을 사용해 만들어짐(하지만, 리눅스에서만 사용해야 하는 것은 아님)
  • 어디서나 실행 가능

 

가상화 기술이란?

  • 하드웨어 리소스를 추상화 하는 것
  • 메모리 가상화 / 하드웨어 가상화(Hypervisor 기반) / 컨테이너 가상화 / 네트워크 가상화

 

  * 하이퍼바이저(Hypervisor)란?

  • 가상 머신을 생성하고 구동하는 소프트웨어
  • OS에 자원을 할당 및 조율
  • OS의 요청을 번역하여 하드웨어에 전달

 


 

docker 유명 밈

 

도커의 유명 밈 중 하나로, '내 컴퓨터에서는 왜 안돼?'이다.

사실상 글쓴이도 많이 겪어본 현상이기 때문에 무척 공감을 하는데, 위의 Docker와 Container 설명을 보면 이 현상을 해결하기 위해 도커가 나왔다는 것을 알 수 있다.

 

즉, 위의 설명들을 토대로 정리해 보았을 때 도커가 생겨나고 사용하는 이유는 아래와 같지 않을까 싶다.

 

' 도커는 컨테이너 기반의 가상화 도구

컨테이너를 실행하면 완전히 격리되고 필요한 것이 안에 다 있기 때문에 어디에서나 실행 가능하다'

 

 


 

 

가상머신이란?

  • 자체 커널, 하드웨어 드라이버, 프로그램 및 애플리케이션이 포함된 전체 운영체제
  • 하나의 물리적인 컴퓨터 자원을 가상적으로 분할 >> 여러 개의 가상 컴퓨터 환경을 만들어내는 기술

 

가상머신과 컨테이너

 

- 가상머신

: Hypervisor라는 중간 단계를 통해 가상화를 시켜줌으로서 자원을 할당해 주고 그 위에 배포를 진행

: 리소스 위에 Hypervisor가 자원을 할당

: 각 가상머신마다 독립된 실행 환경을 제공하기 때문에 각 가상머신 당 공간이 필요(Guest OS는 오버헤드가 크고 무거움)

: 기존 레거시 및 모놀라식 워크로드를 수용하거나 인프라 리소스 프로비저닝 및 다른 OS에서 또 다른 OS를 실행할 때 적합

 

- 컨테이너

: 독립된 실행 환경을 제공하지 않음

: 컨테이너 엔진이 자원을 할당해주고 구동을 진행하여 OS의 자원을 공유

: 컨테이너의 개수가 늘어나더라도 공간을 많이 차지하지 않음

: 빠르게 자주 변경하고 다시 배포해야 하는 거의 모든 애플리케이션이 컨테이너화에 적합

 

 

[ 차이점 ]

  컨테이너 가상머신
정의 애플리케이션의 코드, 라이브러리 및 애플리케이션 실행 환경을 구성하는 기타 종속 구성 요소가 포함된 소프트웨어 코드 패키지 물리적 시스템의 디지털 복제본입니다. 물리적 하드웨어를 여러 환경으로 분할
가상화 운영체제를 가상화 기반 물리적 인프라를 가상화
캡슐화 애플리케이션 또는 애플리케이션 구성 요소를 실행하는데 필요하며, 운영 체제보다 상위에 있는 소프트웨어 계층 운영체제, 그 위의 모든 소프트웨어 계층, 그리고 여러 애플리케이션을 포함
기술 기반 운영 체제와 리소스를 조율 파이퍼바이저가 기반 운영체제 또는 하드웨어와 조율

크기 더 작음 훨씬 큼
제어 컨테이너 외부 환경에 대한 제어 권한이 적음 전체 환경을 보다 효과적으로 제어
유연성 더 유연
오프레미스 환경과 클라우드 중심 환경 간의 신속하게 마이그레이션 가능
유연성이 떨어짐
마이그레이션에 어려움이 존재
확작성 확장성이 뛰어남
마이크로서비스를 통해 세분화된 확장이 가능
확장하는데 비용이 많이 들 수 있음
비용 효율적인 확장을 위해 온프레미스에서 클라우드 인스턴스로 전환해야 함

출처 : https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/

 

컨테이너와 VM 비교 - 배포 기술 간의 차이점 - AWS

컨테이너와 가상 머신을 사용하면 여러 환경에서 실행할 수 있도록 애플리케이션을 완전히 격리할 수 있습니다. 컨테이너와 가상 머신은 기본 인프라를 가상화하거나 추상화하므로 사용자가

aws.amazon.com

 


 

도커의 내부 구조는 어떻게 생겼을까?

 

 

 

1. Client

  • Docker run
  • Docker build
  • Docker pull

: 위 요소들을 통해 Host의 daemon을 제어하고 생성하는 역할을 할 수 있도록 하며, Docker와 상호작용 진행

 

 

2. Docker Host

 1. Docker daemon

 : Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨과 같은 Docker 개체를 관리

 : 컨테이너를 생성 / 시작 / 중지 / 삭제하는 등의 작업

 

 (도커 오브젝트)

 2. Image

 : Docker 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 플랫폼

 

 3. Container

 : 실행 가능한 이미지 인스턴스

 : Docker API or CLI를 사용해 컨테이너를 생성 / 시작 / 중지 / 이동 / 삭제 가능

 : 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지 생성 가능

 

 

3. Registry

: 도커 이미지를 관리하고 저장

* Docker Hub : 누구나 사용할 수 있는 공개 레지스트리

 

 

이해를 위한 Ex)

App Store = Docker Hub

Program = Image

Process = Container

 

도커 허브에서 이미지를 다운받아 컨테이너를 실행한다.

 

 

 

* Docker 공식 홈페이지 : https://docs.docker.com/get-started/overview/

 

Docker overview

Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.

docs.docker.com

 

* Docker Hub : https://hub.docker.com/explore

 

Docker

 

hub.docker.com