컨테이너화 (Containerized)
현재 전 지구적으로 서비스되는 소프트웨어들은 거의 100%가 모두 컨테이너화(Containerized) 되어 있는 프로세스가 실행 중에 있는 것이라고 봐도 무방하다.
소프트웨어의 개발 및 운영(DevOps)에 있어서 몇 가지 issues가 있었다.
- 개발(Dev) 환경과 운영(Ops) 환경의 불일치
- 가볍게 실행 가능한 SW 패키지의 필요성
기존의 가상 머신(Virtual Machine)은 Infrastructure 전체를 추상화한 것이었고, 같은 OS의 가상 머신들 간에도 app에 따라 다른 라이브러리와 의존성을 갖게 되었다.
가상 머신 이미지들은 너무 무겁고 메모리 사용량이 많았기 때문에 단위 시간 내에 많은 수의 프로세스 실행이 가능한 시스템의 필요성을 느끼게 되었다.
==> 이를 해결해 줄 수 있는 것이 컨테이너화(Containerization)였고, 현재 세상의 모든 앱은 컨테이너화 되어서 서비스 되고 있다.
컨테이너화(Containerization)?
소프트웨어 코드를 라이브러리, 프레임워크 및 기타 종속성과 같은 필수 요소와 함께 패키지에 포함하여 각자의 "컨테이너"로 분리하는 것을 뜻하는 것이 '컨테이너화'다. 이렇게 컨테이너화된 소프트웨어 또는 애플리케이션은 어떤 환경과 인프라에서든 해당 환경이나 인프라의 운영 체제와는 상관없이 이동할 수 있으며 일관성있게 실행된다.
비유적으로 표현해보면
말 그대로 우리가 아는 화물을 실어 나르는 컨테이너 배처럼 생각하면 된다.
임의의 다양한 화물들을 패키지로 묶어 일정한 규격(인터페이스)의 컨테이너에 적재하여 보내면 컨테이너를 내린 항구(가상 머신)에서 규격 컨테이너를 부리고(discharge, container engine) 원하는 작업을 수행(app실행)하는 개념이다.
컨테이너 (Container)
컨테이너 (Container)
: 애플리케이션과 애플리케이션 실행에 필요한 모든 dependency를 묶은 패키지이다. 지정된 OS 위에서는 컨테이너가 실행될 수 있도록 컨테이너 엔진(Container engine)을 기계에 장착해준다. (컨테이너 엔진 -> OS level에서의 가상화를 제공해줌)
여기서 가상 머신(VM)과 컨테이너(Container)를 비교해보자.
왼쪽이 가상 머신이고 오른쪽이 컨테이너다. 가상 머신과 컨테이너의 특징은 다음과 같다.
가상 머신
- 과도한 메모리 점유
- 느린 부팅 시간
- 여러 VM을 실행하면 급속히 성능 저하
- Portability(휴대성) 제한
- 낮은 효율
컨테이너
- 낮은 메모리 점유
- 빠른 부팅 시간
- 많은 수의 컨테이너를 실행해도 성능 저하 적음
- 플랫폼에 좌우되지 않음
- 여러 컨테이너가 데이터 공유 가능
- 높은 효율
가상머신은 하드웨어 기반의 여러 Guest OS로 하이퍼바이저(Hypervisor)를 통해 가상화된다. 공통적으로 하나의 서버가 있꼬 한 서버에는 어떤 운영 체제가 있건 Host OS가 올라간다. 하이퍼바이저를 사용하여 원하는 운영체제로 Guest OS를 올려 여러 가상 머신을 만들 수 있으며, Guest OS도 Host OS와 같이 하나의 OS 독립적으로 갖고 있는 것처럼 사용 가능하다.
컨테이너는 애플리케이션 수준의 구성이며 커널 하나를 공유하는 여러 가상 환경을 에뮬레이션 한다. 가상 머신과 Host OS까지 설치는 동일하지만 컨테이너는 컨테이너 엔진(Container Engine)을 통해 Host OS level에서 가상화된다.
'Docker Container' 카테고리의 다른 글
[Docker] Docker swarm (0) | 2022.04.17 |
---|---|
[Docker] Docker-compose (0) | 2022.04.13 |
[Docker] Docker Volume (도커 볼륨)? (0) | 2022.04.13 |
[Docker] Dockerfile (도커파일) (0) | 2022.04.12 |
[Docker] 도커(Docker)? (0) | 2022.04.01 |