Compute

[Kubernetes] 1.What is docker

haewon83 2023. 7. 3. 15:00

 

What is Docker

  • Linux Container에 여러 기능을 추가하여 Application을 Container로 더 쉽게 사용할 수 있게 만들어진 Open Source Project
  • Docker는 Go 언어로 작성
  • 2013년 3월 첫 Release 발표
  • Docker 관련 Project는 Docker Compose, Private Registry, Docker Machine, Kitematic 등 여러 가지가 있지만 일반적으로 Docker라고 하면 Docker Engine
  • Docker Engine은 Contianer를 생성하고 관리하는 주체
  • Docker ecosystem에 있는 여러 Project들은 Docker Engine을 좀 더 효율적으로 사용하기 위한 것들

 

Docker Container

  • 기존 Virtualization 기술은 Hypervisor를 이용해 여러 OS를 하나의 Host에서 생성해서 사용하는 방식
  • 여러 OS는 Virtual Machine이라는 단위로 구별, 각 Virtual Machine에는 Ubuntu, CentOS 등 OS가 설치되어 사용
  • Hypervisor에 의해 생성되고 관리되는 OS는 Guest OS라고 불리며, 각 Guest OS는 다른 Guest OS와 완전히 독립된 공간과 System Resource 할당
  • 하지만, Hypervisor 방식은 각종 System Resource를 가상화하고 독립된 공간을 생성하기 때문에 일반 Host에 비해 Performance Loss가 발생
  • 또한, Virtual Machine은 Guest OS를 사용하기 위한 Library, Kernel 등을 전부 포함하기 때문에 Virtual Machine을 배포하기 위한 Image 생성 시 매우 커지는 단점
  • 이에 반해 Docker Container는 가상화된 공간을 생성하기 위해 Linux 자체 기능인 chroot, namespace, cgroup 을 사용하여 Process 단위의 독립된 환경을 만들기 때문에 Performance Loss가 거의 없음
  • Container에 필요한 Kernel은 Host의 Kernel을 공유하고, Contianer안에 Application을 구동하는데 필요한 Library 및 실행 파일만 존재하기 때문에 Container를 Image로 만들었을 때 용량이 매우 작음
  • 따라서 Container Image는 Virtual Machine에 비해 빠르게 배포 가능

 

Pros of Docker

  • Container 내부에 수많은 Software를 설치하고, 설정 파일을 수정해도 Host OS에는 영향을 끼치지 않기 때문에 독립된 개발 환경을 보장받을 수 있음
  • Container 내부에서 여러 작업을 마친 뒤, 이를 운영 환경에 배포하려는 경우 해당 Container를 Docker Image라고 불리는 Package로 만들어서 운영 서버에 전달
  • 새롭게 Package를 설치할 필요도, 각종 Library 설치 등으로 인한 Dependency 걱정할 필요도 없음
  • Docker는 또한 Image 내용을 Layer 단위로 구성하며, 중복되는 Layer를 재사용할 수 있어 Application의 배포 속도가 매우 빨라진다는 장점
  • 여러 모듈이 상호 작용하는 Logic을 하나의 Program 내에서 구동시키는 방식을 Monolith Application이라고 함
  • Monolith Application은 소규모 서비스 방식에서는 어울리나, 서비스의 기능이 복잡해지고 거대해질수록 Software 자체의 확장성과 유연성이 줄어든다는 단점
  • 이러한 Monolith 방식을 대체하기 위해 새롭게 떠오른 개념이 바로 Microservice
  • Microservice 구조는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응 가능하고 각 Module의 관리가 쉬워진다는 장점
  • Container는 수 초 내로 생성, 시작이 가능할 뿐만 아니라 여러 Module에게 독립된 환경을 동시에 제공할 수 있기 때문에 Microservice 구조에서 가장 많이 사용되고 있는 가상화 기술
  • 예를 들어, 웹 서비스는 Database Container와 Web Server Container로 분리할 수 있고, 부하 발생 시 Web Server Container만 동적으로 늘려서 부하 분산 가능