들어가며
- 도커를 조금 더 자세하고 정확하게 이해하기 위해 자료를 정리합니다.
- 아래의 모든 내용의 출발점은
도커는 어떻게 OS위에서 동작할까?
에서 시작합니다.
도커는 OS위에서 동작하는거 같은데.. 가상 머신일까? 프로세스(컨테이너)일까?
가상 머신이란 무엇일까?
- 가상 머신은 하드웨어(CPU, RAM, Network) 스펙들을 소프트웨어로 구현합니다.
- 쉽게 말하자면 소프트웨어 위에 컴퓨터를 다시 만드는 것?
- 하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원(CPU, RAM, Network등)을 할당받습니다.
- 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.
리눅스 컨테이너란?
운영체제 수준
의 가상화 기술로리눅스 커널을 공유
하면서프로세스를 격리된 환경
에서 실행하는 기술입니다.- 리눅스 컨테이너는 호스트 머신에게는 프로세스로 인식합니다.
- 컨테이너 관점에서는 마치 독립적인 환경을 가진 가상 머신처럼 보입니다.
- 컨테이너에는 다양한 프로세스 격리 기술이 사용됩니다.
- chroot
- 호스트의 루트가 아닌 Root 디렉토리를 변경하는 기능
- chroot로 인한 파일시스템 분리 - 44bits
- chroot를 사용해 프로세스의 루트 바꾸기
- cgroups
- 자원에 대한 제어를 가능하게 해주는 기능
- CPU, 메모리, I/O, 네트워크
- namespaces
- 컨테이너 별로 서로가 충돌하지 않도록 하는 기능
- 독립적인 프로세스 공간을 할당하거나
- namespace간 네트워크 충돌방지하는 등등의 기능
- 프로세스 격리 기술의 표준으로 정의해둔 OCI(Open Container Initative) 스펙을 구현한 컨테이너 기술의 구현체
- LXC, LibContainer, runC
- chroot
컨테이너와 가상 머신은 무슨 차이가 있을까?
VM
- 커널이 각각 소유하기 때문에 보안에 더 강하다.
- 더 많은 자원을 사용하게 된다.
- 문제가 생기는 경우 운영체제부터 리부팅을 진행해야 하기 때문에 복구 시간이 오래 걸린다.
Linux Container
- 커널을 공유하기 때문에 보안에 취약할수도 있다.
- 커널을 공유하기에 더 적은 자원을 사용하게 된다.
- 문제가 생기는 경우 해당 컨테이너만 빠르게 리부팅을 하여 복구 할 수 있다.
추가적으로 컨테이너는 커널을 공유한다는데.. 커널옵션은 어떻게 적용되는것인가?
- 예전에는 우회하는 방법을 사용했지만 현재 문서를 확인해보니 공식적으로 지원하는 것처럼 보인다.
- docker ulimit
- 커널 옵션이 공유가 되는 건 아닌 것처럼 보이는데 정확하게는 더 찾아봐야겠다..