일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링
- spring
- Oracle
- 정보처리기사
- 리액트네이티브
- 정보처리기사정리
- Java의정석
- 자바스크립트 코딩테스트
- 정보처리기사실기
- ReactNative
- 코딩테스트
- javascript
- 이안의평일코딩
- 자스코테
- CSS
- typescript
- VUE
- 자바의정석
- react
- 자바스크립트
- 타입스크립트
- 국비IT
- 정보처리기사실기정리
- 평일코딩
- 정보처리기사요약
- php
- 정보처리기사실기요약
- 오라클
- 리액트
- 국비코딩
- Today
- Total
이안의 평일코딩
[Docker] 하이퍼 바이저, VM, 도커 컨테이너, 이미지 본문
도커를 사용할 때의 흐름
먼저 도커 CLI에 커맨드를 입력한다. 도커 서버(도커 Daemon)이 그 커맨드를 받아서 그것에 따라 이미지를 생성하든 컨테이너를 실행하든 모든 작업을 하게 된다.
docker run hello-world
도커 클라이언트 명령어 입력하면 도커 서버에서 hello-world 이미지가 있는지 확인 후 만약 캐시 보관 장소에 hello-world 이미지가 없다면 도커 허브(이미지들을 보관하는 곳)에서 가져온다. (Pulling from ...)
도커 서버에서 가져온 이미지를 이용해서 프로그램을 실행시켜준다.
하이퍼 바이저(Hypervisor)
가상화 기술이 나오기 전
한대의 서버를 하나의 용도로만 사용하고 남는 서버 공간을 그대로 방치, 하나의 서버에 하나의 운영체제, 프로그램만을 운영하여 안정적이지만 비효율적이었다.
하이퍼 바이저 기반의 가상화 출현
논리적으로 공간을 분할하여 Virtual Machines, VM이라는 독립적인 가상 환경의 서버를 이용 가능하게 된다. 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어로 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자이다. 하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받는다. 논리적으로 분리되어 있어 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있다.
네이티브 하이퍼 바이저 vs 호스트형 하이퍼 바이저
네이티브 하이퍼 바이저는 하드웨어를 직접 제어하기에 자원을 효율적으로 사용 가능하며, 별도의 호스트 OS가 없으므로 오버헤드가 적지만 여러 하드웨어 드라이버를 세팅해야 하므로 설치가 어렵다는 단점이 있다.
호스트형 하이퍼 바이저는 일반적인 소프트웨어처럼 호스트 OS 위에서 실행되며, 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식이기 때문에 오버헤드가 크다. 하지만 게스트 OS 종류에 대한 제약이 없고 구현이 다소 쉬워서 일반적으로 많이 이용한다.
가상머신(VM)과 도커 컨테이너
VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍다. 어플리케이션을 실행할 때, 컨테이너 방식에서는 호스트 OS위에 어플리케이션의 실행 패키지인 이미지를 배포하기만 하면 되는데 VM은 어플리케이션을 실행하기 위해서 VM을 띄우고 자원을 할당한 다음 게스트 OS를 부팅하여 어플리케이션을 실행해야 하기 때문에 훨씬 복잡하고 무겁게 실행된다. (도커 컨테이너는 게스트 OS를 가지지 않음)
공통점: 가상 머신과 도커 컨테이너는 기본 하드웨어에서 격리된 환경 내에 어플리케이션을 배치하는 방법이다.
차이점: 격리된 환경을 얼마나 격리를 시키는지의 차이가 있다. 도커 컨테이너는 Host OS에 실행 패키지인 이미지를 배포하면 되지만 VM은 어플리케이션 하나를 실행하기 위해 VM을 띄우고 게스트OS도 부팅한 다음 어플리케이션을 실행해야 되기때문에 도커 컨테이너가 훨씬 가볍다.
어떻게 도커 컨테이너를 격리 시킬까?
먼저 리눅스에서 쓰이는 Cgroup(control groups)과 네임스페이스(namespaces)에 대해서 알아야 한다. 이것들은 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들이다.
C Group(Control Groups)
CPU, 메모리, Network Bandwith, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 어떤 어플이 사용량이 너무 많다면 그 어플리케이션 같은 것을 C group에 집어 넣어서 CPU와 메모리 사용 제한이 가능하다.
네임스페이스(Namespaces)
하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술로 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술이다.
리눅스 환경이 아닌데 어떻게 사용 가능할까?
나는 Mac OS를 이용하지만 (누군가는 Windows를 사용하겠죠) 컨테이너에 리눅스 VM이 깔려있기 때문에 리눅스 커널을 통해 Cgroup과 네임스페이스를 사용이 가능하다.
도커 이미지
이미지는 응용 프로그램을 실행하는데 필요한 모든 필요한 것을 포함하고 있다.
1)시작시 실행 될 명령어. ex) run kakaotalk
2)파일 스냅샷. ex) 컨테이너에서 카카오톡을 실행하고 싶다면 카카오톡 파일 스냅샷
* 파일 스냅샷은 디렉토리나 파일을 카피한 것
컨테이너는 프로세스를 작동시키는데 필요한 양만 가지고 있다.
'Back-end > Docker' 카테고리의 다른 글
[Docker] 도커란 무엇일까? (2) | 2021.03.12 |
---|