일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- modifiers
- 백준 1712
- 테슬라폰
- 1764
- 다형성
- 개발바닥
- java
- 유선LAN
- aws 자격증
- 자바
- 역캡슐화
- 네트워크
- 프로토콜
- TCP/IP
- 남궁성
- 상속
- 자바의 정석
- network
- 인프콘
- 백준 2775
- 물리구성도
- AWS CLF
- 10866
- 논리구성도
- 파이썬 1712
- 데이터 송수신
- 인터페이스
- 계층화
- 파이썬
- l3 스위치
- Today
- Total
병훈's Blog
도커와 VM의 차이점 본문
왼쪽이 VM 환경, 오른쪽이 Docker 환경이다.
딱 봐도 가장 두드러지는 차이점은 Guest OS의 유무다.
둘의 차이는 여기부터 시작된다.
Docker는 Guest OS가 없기 때문에 더 가볍고, 더 빠르다.
그럼 Docker는 어떻게 동작하는 걸까?
도커의 컨테이너는 Host OS의 커널을 공유한다.
커널은 HW 자원을 관리하고, HW와 프로세스 사이의 인터페이스 역할을 수행한다.
도커는 커널의 자원을 가상화하고 이를 프로세스에 할당한다.
결과적으로 하나의 커널을 공유하고 있기 때문에
Host 시스템에서도 컨테이너 내부의 프로세스를 볼 수 있다.
그렇다면 잠깐!
도커의 장점 중의 하나는 격리성이다. 프로그램마다 격리된 환경에서 실행되는 것이다.
도커는 커널을 공유하면서 어떻게 독립된 공간을 만들어내는 걸까?
도커에서 독립된 공간은 리눅스 커널의 Cgroup과 namespace 기능을 이용해서 구현되어 있다.
이 기능을 통해서 다른 프로세스 사이에 벽을 만든다.
리눅스 커널의 Cgroup과 namespace에 대한 내용은 꽤 길기에,
아래 블로그를 참조해주세요.
https://csj000714.tistory.com/655
이제 VM과 하이퍼바이저에 대해서 정리해보자.
VM(Virtual Machine)
가상화 기술은 물리적인 자원을 논리적으로 구분하여 각 프로세스에 할당 해주는 기술이다.
가상화 이전에는 하나의 서버에 하나의 애플리케이션만 구동 시킬 수 있었다.
프로그램만을 운영하기 때문에 안정적이었지만,
남는 서버 자원을 그대로 방치 시키기 때문에 비효율적인 경우가 많았다.
이런 비효율성을 극복하기 위해 등장한 것이 가상화 기술이다.
그 중에서도 하이퍼바이저 기반의 가상화가 많이 이용되었다.
하이퍼바이저는 논리적으로 분할 된 공간에서 VM(Virtual Machine) 이라는 독립된 가상 환경을 만들고,
호스트 시스템에서 VM에 깔린 게스트 OS를 구동 및 모니터링 하는 역할을 한다.
하이퍼바이저로 가상화를 적용하면 물리적인 서버에서 하나 이상의 독립적인 운영체제가 돌아갈 수 있다.
즉 물리적인 하나의 Host OS 위에 여러 다른 독립적인 Guest OS들이 가상으로 돌아가는 구조이다.
이 방법을 사용하면 물리적 서버의 자원을 더 효율적으로 사용할 수 있다.
하지만 각각의 OS들을 위해 매번 자원을 할당하고 부팅을 해야 하기 때문에 시간, 자원 적으로 소모가 많다.
Hypervisor
하이퍼바이저는 가상 머신을 생성하고 구동하는 소프트웨어다.
가상 머신 모니터라고도 불리는 하이퍼바이저는
하이퍼바이저 운영 체제와 가상 머신의 리소스를 분리하여
가상 머신의 생성과 관리를 지원한다.
하이퍼바이저를 실행시키는 물리적 하드웨어를 호스트라고 부르고, 해당 자원을 할당받은 VM 들을 게스트라고 한다.
하이퍼바이저는 CPU, 메모리, 스토리지 등의 자원을 처리하는 풀로 할당된 자원을 각 가상 머신에 제공하고,
실제 자원에 대한 VM 자원의 일정을 관리한다. 호스트 시스템의 하드웨어는 요청을 받아서 실행 작업을 수행하는데,
하이퍼바이저가 VM 의 작업 일정을 관리하면서 VM이 작업을 요청하면
CPU 가 VM 의 요청을 받아서 CPU 명령을 실행한다.
하이퍼바이저를 사용하여 가상 머신을 실행시키면 여러 개의 다른 OS를 독립적으로
하나의 호스트 OS 에서 실행할 수 있고, 같은 가상화 하드웨어 자원과 하이퍼바이저를 공유하여 사용할 수 있다.
이것이 가상화의 가장 큰 장점이다.
VM vs Docker
VM
- VM은 여러 OS를 사용해야 하는 상황에 적합하다.
- VM은 Host OS를 공유하지 않기 때문에 컨테이너에 비해 더 안전하다
- VM은 자신의 OS를 가지고 있기 때문에 여러 자원 집약적인 기능을 한번에 수행할 수 있다.
그렇기 때문에 VM 에서 사용할 수 있는 자원이 늘어나면 서버, OS, DB, 데스트톱, 네트워크 등에 대해
추상화, 분할, 복제 등을 수행할 수 있다. - VM 은 OS 복사본과 애플리케이션 및 기타 필요한 바이너리 파일들과 라이브러리들을 전부 포함하고 있기 때문에
용량이 크고, 부팅하는데 더 많은 시간이 소요됨
Docker
- Docker는 더 빠르고 더 가볍다.
- Docker는 컨테이너를 확장하고 복제하는 것이 간단하다.
- Docker 컨테이너는 단일 운영체제 커널에서 여러 응용 프로그램을 실행하려는 경우에 적합하다.
- Docker 컨테이너는 Host의 커널을 공유하기 때문에 보안 위험과 취약점이 많다.
참고:
Docker(Container)와 VM의 차이는 무엇인가?
도커(Docker)와 가상환경(Virtual Machine)의 차이
'Computer > Operating System' 카테고리의 다른 글
Linux를 서버 OS로 사용하는 이유 (0) | 2023.11.10 |
---|