가상화
- 컴퓨터 시스템에서 물리 리소스를 추상화하는 것
(물리 리소스 : 서버, 네트워크, 저장소 등)
- Virtual, 가상 → '실제로 존재하는 것과 같다', '사실과 거의 같다'
1. OS
- 하드웨어를 의식하지 않고 애플리케이션을 실행할 수 있는 운영체제
- 가상화 기술 중 하나

2. 가상머신
- 컴퓨팅 환경을 SW로 구현한 것. 컴퓨터 시스템을 에뮬레이션하는 SW
가상머신 방식 : 호스트 OS형 vs 하이퍼바이저형

하이퍼바이저형 가상화 구조 : 완전가상화 vs 준가상화

3. 컨테이너
- 리소스가 격리된 프로세스
- 하나의 OS상에서 여러 개를 동시에 가동 가능
가상머신 vs 컨테이너
- 가상머신(VM)과의 차이점 : 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용 가능

컨테이너의 역사
1) 1970년대 chroot 개발 (빌 조이(Bill Joy))
- 컴퓨터 비쌈 → 상용 환경과 개발 환경 별도로 준비 시 비용 ↑ → 하나의 컴퓨터로 상용, 개발 환경 함께 사용
→ 문제 : 잘못된 파일 변경 및 삭제 위험 ⇒ chroot 등장
chroot ?
- 프로세스가 OS의 루트 디렉토리 아래에 있는 특정 계층에 접근 못하도록 하는 기능
- 현재도 다양한 분야에 적용
- ex) 리눅스의 레스큐 모드(Rescue Mode), FTP에서 사용자 단위로 접근 범위 한정 기능, 포스트픽(Postfix)이나 바인드(BIND) 등으로 접근할 수 있는 디렉토리 한정 기능 등
2) 1990년대 FreeBSD jail 등장
- 특정 디렉토리 이하를 루트 디렉토리처럼 보이게 하는 chroot 개념 추가
→ 애플리케이션의 프로세스 격리 가능
3) 2000년대 솔라리스(Solaris) 컨테이너 - 컨테이너 기능 제공
(빌 조이가 소속되있던 선 마이크로시스템즈(Sun Microsystems))
→ 오라클 솔라리스 11에선 "오라클 솔라리스 존(Solaris Zone)"
4. 도커
- 2013년 파일시스템과 프로세스 분리 기능 추가
→ 파일시스템 이미지의 패키징과 버저닝이 가능해짐
→ 컨테이너 이미지 공유 가능한 '도커' 등장

- 2008년 도커 회사 개명 전 '닷클라우드(dotCloud)' 설립
목적 : 언어에 의존하지 않는 PaaS 구축
닷클라우드의 PaaS
- 개발한 애플리케이션을 클라우드에 배포해서 실행하는 구조
→ 애플리케이션 관련 프레임워크, 라이브러리 등의 버전 불일치
→ 로컬에서 실행된 프로그램이 클라우드에서는 실행되지 않는 문제 발생
⇒ 클라우드 내부 구조로 개발했던, 애플리케이션 실행 환경을 자동 구축해주는 '도커 이미지'라는 기술을 클라우드 이외의 환경에서도 사용할 수 있게 오픈소스로 공개
- 도커 허브 : 도커 이미지를 공유할 수 있는 레지스트리
도커의 장점 (vs 가상머신)
- 컨테이너 → 호스트 OS와 OS 커널 공유 ⇒ 컨테이너 실행 · 정지 속도가 빠름
- 호스트 OS의 커널 공유 → VM만 사용하는 경우와 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테이너 실행 가능
⇒ 리소스를 한 곳에서 쉽게 관리 가능
- 라이브러리 · 프레임워크 등을 도커 이미지로 묶어서 공유 가능 → 특정 환경에서는 재현되지만, 자신의 개발 환경에서는 재현되지 않는 문제가 발생하기 어려움 ⇒ 효율적인 버그 수정 가능
5. 클라우드 ··· (나중)
출처 : 야마자키 야스시 외 3, 「그림으로 공부하는 IT 인프라 구조」, 제이펍