Docker란?

들어가며

  • 도커를 조금 더 자세하고 정확하게 이해하기 위해 자료를 정리합니다.
  • 아래의 모든 내용의 출발점은 도커는 어떻게 OS위에서 동작할까?에서 시작합니다.

도커는 OS위에서 동작하는거 같은데.. 가상 머신일까? 프로세스(컨테이너)일까?

가상 머신이란 무엇일까?

  • 가상 머신은 하드웨어(CPU, RAM, Network) 스펙들을 소프트웨어로 구현합니다.
  • 쉽게 말하자면 소프트웨어 위에 컴퓨터를 다시 만드는 것?
  • 하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원(CPU, RAM, Network등)을 할당받습니다.
  • 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.

리눅스 컨테이너란?

  • 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술입니다.
  • 리눅스 컨테이너는 호스트 머신에게는 프로세스로 인식합니다.
  • 컨테이너 관점에서는 마치 독립적인 환경을 가진 가상 머신처럼 보입니다.
  • 컨테이너에는 다양한 프로세스 격리 기술이 사용됩니다.
    • chroot
    • cgroups
      • 자원에 대한 제어를 가능하게 해주는 기능
      • CPU, 메모리, I/O, 네트워크
    • namespaces
      • 컨테이너 별로 서로가 충돌하지 않도록 하는 기능
      • 독립적인 프로세스 공간을 할당하거나
      • namespace간 네트워크 충돌방지하는 등등의 기능
    • 프로세스 격리 기술의 표준으로 정의해둔 OCI(Open Container Initative) 스펙을 구현한 컨테이너 기술의 구현체
      • LXC, LibContainer, runC

컨테이너와 가상 머신은 무슨 차이가 있을까?

VM

  • 커널이 각각 소유하기 때문에 보안에 더 강하다.
  • 더 많은 자원을 사용하게 된다.
  • 문제가 생기는 경우 운영체제부터 리부팅을 진행해야 하기 때문에 복구 시간이 오래 걸린다.

Linux Container

  • 커널을 공유하기 때문에 보안에 취약할수도 있다.
  • 커널을 공유하기에 더 적은 자원을 사용하게 된다.
  • 문제가 생기는 경우 해당 컨테이너만 빠르게 리부팅을 하여 복구 할 수 있다.

추가적으로 컨테이너는 커널을 공유한다는데.. 커널옵션은 어떻게 적용되는것인가?

  • 예전에는 우회하는 방법을 사용했지만 현재 문서를 확인해보니 공식적으로 지원하는 것처럼 보인다.
    • docker ulimit
    • 커널 옵션이 공유가 되는 건 아닌 것처럼 보이는데 정확하게는 더 찾아봐야겠다..

Reference

0%