[ 데브위키 개발자를 위한 쉬운 도커 #3 ] 컨테이너 가상화

김수호·2024년 8월 7일
0
post-thumbnail

이번 내용에서는 컨테이너 가상화 기술에 대해서 알아보자.

컨테이너 가상화

컨테이너 가상화 기술은 현대의 애플리케이션 운영 환경에서 하이퍼바이저 방식보다 더 선호되는 가상화 기술이다.

소비자의 니즈가 빠르게 변화하는 모던 애플리케이션 운영 환경에서, 컨테이너 가상화 기술이 더 선호되는 대표적인 이유는 가볍고, 빠르다 는 두가지 장점 때문이다.

두가지 가상화의 차이를 기술적으로 비교해보자.

  • 컨테이너 가상화
    • 컨테이너 가상화는, 리눅스 커널이 제공하는 LXC(Linux Containers) 라는 자체 격리 기술에서 출발했다.
    • 하이퍼바이저라는 소프트웨어가 격리된 공간을 만들어주었던 하이퍼바이저 가상화와는 달리, LXC 기술을 사용하면 하이퍼바이저를 사용하지 않고도, 커널의 자체 기능만 사용해서 격리된 공간을 만들 수 있다.
      • 참고) LXC 기술은 커널의 NamespaceCgroups 라는 기능을 활용한다.
        • Namespace 는 프로세스와 하드 드라이브, 네트워크, 사용자, 호스트명 처럼 리소스를 나누는 기준의 역할을 한다.
        • Cgroups 는 프로세스가 사용하는 메모리와 CPU, 하드디스크, network bandwidth 처럼, 리소스의 사용량을 배분하는 기술이다.
        • 그리고 이런 LXC 기술을 사용해서 만들어진 각각의 격리된 공간컨테이너 라고 부른다.
        • NamespaceCgroups 같은 디테일한 기술이 중요하다기 보다는, 컨테이너 가상화는 하이퍼바이저 없이, 커널의 자체 기술을 활용한 가상화 라는 것을 이해하는 것이 중요하다.
    • 컨테이너 가상화는 커널의 격리 기능을 활용하기 때문에, 위 그림에서 보이는 것 처럼, 모든 컨테이너는 호스트 OS의 커널을 공유해서 사용한다.

 

✔️ 호스트 OS의 커널을 공유한다는 것이, 컨테이너 가상화의 가장 중요한 특징중 하나이다.

  • 참고)
    • 앞서 보았던 하이퍼바이저 가상화를 다시 살펴보자.
      • 하이퍼바이저 가상화는 게스트 OS와 호스트 OS의 커널이 독립적으로 존재했다.
      • 그리고 하이퍼바이저라는 소프트웨어가 중간에서 커널간의 통신을 지원한다.
      • 그런데 이렇게 되면, 각각의 시스템 콜들이 하이퍼바이저의 통역을 거쳐가기 때문에, 요청이 거쳐가는 단계가 늘어난다. ( 이 단계가 많다는 것을, 오버헤드가 크다고 표현한다. )
      • 또한, 커널이 독립적으로 있다는 것은, 이 커널을 실행하는데 있어서 시간이 더 필요하다는 것을 의미한다.
    • 이번엔 컨테이너 가상화를 살펴보자.
      • 컨테이너는 호스트 OS의 커널을 그대로 사용하기 때문에, 중간 단계가 따로 없어서 하이퍼바이저 가상화 방식보다 상대적으로 오버헤드가 적다. 오버헤드가 적다는 것은, 하드웨어 리소스 사용 요청이 더 효율적으로 이루어 진다는 것을 의미한다.
      • 또한, 각각의 컨테이너들은 자체적인 커널이 없고, 호스트 OS의 커널을 공유하기 때문에, 커널을 실행하는 시간 자체가 없어진다. ( 빠른 부팅 ) 그래서 일반적으로 컨테이너 가상화는 하이퍼바이저 가상화보다 훨씬 더 부팅속도가 빠르다는 장점이 있다.
    • 결과적으로 오버헤드가 적고, 부팅이 빠르다는 점이 -> 모던 애플리케이션 환경에서 여러 소비자의 요구사항을 충족시킬 수 있는 것이다.
      • 참고로, 다만 커널을 독립적으로 가지고있는 가상 머신이 보안면에서는 더 뛰어나다고 볼 수도 있다.
      • 그리고 컨테이너는 호스트OS의 커널을 공유하기 때문에, 호스트 OS와 다른 종류의 OS는 실행할수 없다는 것이 상대적인 단점이라고 볼 수 있다.
    • 정리)
      • 가상화 기술은 큰 서버를 나눠서 사용할 수 있는 기술이다.
      • 가상화 기술은 하이퍼바이저를 사용한 가상머신 기술을 사용했다. 그러나 이 가상머신 방식은 각각의 게스트OS가 독립적인 커널을 가지기 때문에, 구성하고 실행하기까지의 시간이 오래 걸리고, 하나의 게스트 OS가 차지하는 오버헤드가 크다는 단점이 있었다.
      • 현대의 애플리케이션 운영 환경에서는, 애플리케이션이 소비자의 니즈에 맞게 변경사항이 빠르게 적용될 수 있어야 한다.
        • 여기서 등장한 컨테이너 가상화의 가볍고 빠르다는 특징이, 이런 요구사항들을 만족시킬 수 있었다. ( 그래서 더 선호되는 가상화 기술이 될 수 있었다. )

 

✔️ 참고) 커널이 자체적으로 제공하는 가상화 기술은, 사용자가 직접 컨트롤하기는 어렵다.

  • Docker
    • docker 라는 소프트웨어는 이 커널의 컨테이너 가상화 기술을 편리하게 사용하기 위해 만들어진 소프트웨어 이다.
    • 사용자는 도커를 통해서 컨테이너를 만들고 운영할 수 있다.
    • 그림만 봐서는 하이퍼바이저와 비슷하게 보일 수도 있다.
      • 하이퍼바이저 방식에서는 격리된 공간을 만드는 주체가 하이퍼바이저라는 소프트웨어라면,
      • 컨테이너 가상화에서 실제 격리를 수행하는 주체는, 도커 소프트웨어가 아닌, 커널 자체이다.
        • 도커는 이 커널의 가상화 기술을 활용할 수 있게 도와주는 보조 도구라고 볼 수 있다.

 

다음 내용에서는, docker 가 동작하는 방식에 대해서 알아보자.


강의를 듣고 정리한 글입니다. 코드와 그림 등의 출처는 데브위키 강사님께 있습니다.
( https://inf.run/Apgvc )

profile
현실에서 한 발자국

0개의 댓글