CS 면접대비 - 컨테이너
도커가 왜 필요할까요?
- 옛날 이야기를 잠깐 하면
- 옛날에는 서버를 관리하는게 쉽지 않았습니다
- 새롭게 설치해야하는 프로그램은 많고
- 운영체제는 업데이트되고
- 그와중 프로그램끼리 호환이 안되는 경우도 많고
- 지금 당장 리눅스에 MySQL을 까는건 쉽지 않습니다
- 이런 문제들을 해결해보기 위해서 VM이라는게 먼저 나왔습니다.
그렇다면 VM은 뭔가요?
-
동일한 하드웨어에서 여러개의 운영체제 인스턴스를 돌려보자 라는 의도의 결과입니다.
- 마치 냉장고 안에 냉장고를 넣듯이, 서로 완벽하게 격리되어있고 OS 정보들을 모두 보유하고 있습니다.
- 각 VM은 호스트로부터 Hypervisor를 통해서 가상 하드웨어와 어댑터를 할당받아서 실제 여러개의 하드웨어가 없더라도 공유할 수 있도록 합니다.
- 윈도우에서 C드라이브의 Windows 폴더 전체
그렇다면 VM으로 말씀하신 내용을 다 커버할 수 있는거 아닌가요?
- 물론 가능은 합니다만, VM에는 비효율성이 몇가지 있습니다.
- 운영체제 파일 자체를 요구하기 때문에 고정된 하드디스크 요구량과 메모리
- 시작하는데 OS별 부팅과정을 거치기 때문에 오래 걸리고
- 별도의 커널/라이브러리/바이너리가 다 필요하기때문에 리소스를 많이 먹습니다
-
사람들은 이 발상을 하게 됩니다 : 굳이 별도의 커널과 OS로 다른 어플리케이션을 실행해야 할까?
- 따라서 도커가 등장합니다
- 도커는 일종의 VM으로 리눅스 커널을 이용하여 하위 컨테이너들을 분리합니다.
도커는 일종의 VM? 맞나요?
-
VirtualBox나 VMWare같은 VM이라기보다는, 도커 엔진이 가상화된 리눅스 환경을 구현해줍니다. - 윈도우같은경우에는 내장되어있는 hyper-v를 사용합니다. - 맥의 경우에도 리눅스 커널을 에뮬레이팅 해주는 애플리케이션을 사용합니다. HyperKit
컨테이너는 매번 OS파일들을 보유할 필요가 없습니다.
- 마치 냉장고에 야채칸, 계란칸, 김치칸 칸막이를 만드는 것처럼 입니다.
도커는 어떻게 그러면 프로세스를 격리하나요?
- 제가 알고있는바로는 리눅스의 Cgroup과 namespace 기능을 활용하는것으로 알고있습니다.
도커는 그럼 어떻게 그런 운영체제의 버전이나, 다양한 운영체제의 종류를 적은 용량을 통해 저장하나요?
- Aufs라는 특별한 파일 시스템을 사용하고, 해당 도커파일을 빌드해서 사용합니다.
댓글남기기