우선 리소스 격리성에 대해 알아보자
웹 서버1과 웹 서버 2의 요구사항이 아래와 같다고 가정
| 웹 서버1 | 웹 서버2 | |
|---|---|---|
| IP | A | B |
| Port Number | A-1 | B-1 |
| 방화벽 규칙 | a | b |
IP 주소는 인터넷상에 있는 컴퓨터의 고유한 주소
IP 주소를 통해 인터넷 상의 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고 받음
port number를 통해 프로세스, 즉 프로그램의 실행을 식별
IP address는 집 주소, 포트 번호는 방 호수 라고 생각하면 쉽다
서버가 하나밖에 없으면 IP 주소를 구분하기 위해 브릿지 설정을 변경해야 한다
그리고 웹 서버 1과 웹 서버 2의 방화벽 규칙이 충돌하는 상황
이 때 필요한 것이 리소스 격리성
실제로는 하나의 컴퓨터를 이용하지만, 여러 개의 컴퓨터를 이용하는 것처럼 할 수 있다

[왼쪽: 도커, 오른쪽: 가상머신]
가상머신과 도커는 격리성 제공
-> 각 애플리케이션마다 다른 컴퓨터에서 진행되는 것처럼IP와port를 다르게 설정 가능
컨테이너 기술과 가상 머신의 공통점
: 프로세스, 네트워크, 파일 시스템 등을 격리할 수 있음
그럼 둘의 차이는 대체 뭘까...??
도커는 VM처럼 OS 위에 다른 OS를 실행하는 것이 아님
-> 가상머신보다 좋은 성능을 낼 수도 있음
VM은 만들고 실행하는 과정에서 많은 컴퓨팅 자원을 필요로 한다
그에 반해 도커는 한 호스트 컴퓨터에서 여러 개의 컨테이너를 띄워도 크게 무리가 없다
VM을 여러 개 띄운다고 생각하면...벌써 아찔하다 진짜
VM을 사용하기 위해서는 해당 VM 위에 반드시 OS 설치
-> 도커 이미지는 보통애플리케이션 단위(물론 OS 이미지도 존재)

[왼쪽: 가상 머신, 오른쪽: 도커]
사진을 보면, VM의 구성 요소에는 OS가 존재하지만 도커 컨테이너는 OS 포함 안 함
다만, 도커라는 플랫폼 위에 컨테이너들이 올라가 있고, 그 아래에 호스트 OS 존재
각 컨테이너는
호스트 OS의 커널 공유
kernel: 시스템 콜과 같이 OS의 핵심 기능을 구현한 프로그램
도커는 애플리케이션을 컨테이너화해서 실행하는 것이 주 목적이므로
호스트 OS 입장에서 컨테이너 하나는 하나의 프로세스 수준이다