[Docker] 컨테이너 가상화, 도커란?

옹심이·2024년 12월 14일
0
post-thumbnail

시작하며

이전 포스트에서 가상화가 무엇이고 왜 사용하는지, 그리고 전통적인 가상화 도구인 하이퍼바이저에 대해 다뤘다.

이번 포스트에서는 컨테이너 가상화 방식과 도커에 대해 다룬다.

컨테이너 가상화

컨테이너 가상화는 커널 자체만으로 격리된 공간을 만들 수 있다.

컨테이너 가상화는 리눅스 커널이 제공하는 LXC라는 자체 격리 기술에서 시작되었다. LXC는 하이퍼바이저와 같은 별도의 소프트웨어 없이 커널의 자체 기능만 가지고 격리된 공간을 만들 수 있다.

이는 커널의 네임스페이스와 CGROUPS라는 기능을 활용한다.

  • 네임스페이스 : 프로세스와 하드드라이브, 네트워크 사용자, 호스트 네임과 같이 리소스를 나누는 기준 역할을 한다.
  • CGROUPS : 프로세스가 사용하는 메모리와 CPU, 하드디스크, 네트워크, 밴드위스처럼 리소스의 사용량을 배분하는 기술이다.

컨테이너는 호스트 OS의 커널을 공유해서 사용한다.

하이퍼바이저는 게스트 OS와 호스트 OS의 커널이 독립적으로 존재하였고 하이퍼바이저가 커널간의 통신을 도와준다고 하였다. 이런 경우에는 게스트OS가 호스트의 하드웨어 리소스에 접근할 때마다 하이퍼바이저를 거쳐야하고 그만큼 오버헤드가 발생한다.

하지만 컨테이너 가상화는 어떨까? 호스트 OS의 커널을 그대로 사용하기 때문에 중간 단계를 거치지 않아 상대적으로 오버헤드가 줄어든다.

또한 각각의 컨테이너들은 자체적인 커널이 없고 호스트 OS의 커널을 공유하기 때문에 컨테이너 실행 시 커널을 실행하는 시간 자체가 없어진다. 그래서 독립적으로 커널을 가지고있는 하이퍼바이저 가상화보다 부팅 속도가 훨씬 빠르다는 장점이 있다.

이러한 장점들을 가진 컨테이너 가상화는 변경이 잦고 빠르게 일어나야 하는 현대 엔터프라이즈 운영 환경의 요구 사항을 만족시켜 더 선호되는 가상화 기술이 되었다.

도커

컨테이너 가상화에서는 커널에서 격리 공간을 만든다고 하였다. 도커는 이러한 컨테이너 가상화 기술을 사용한다. 도커는 격리 공간을 만드는 주체가 아니고 사용자가 컨테이너 가상화 기술을 더 쉽게 사용할 수 있도록 도와주는 보조 도구이다.

도커의 구조

도커는 클라이언트-서버 모델로 실행된다. 도커는 사용자 명령을 전달해주는 클라이언트와 실제 컨테이너를 관리해주는 도커 데몬 서버가 존재한다.

  • 클라이언트 : 사용자의 요청을 도커 데몬으로 전달한다.
  • 도커 데몬 서버 : 호스트 OS에서 지속적으로 실행되면서 클라이언트의 요청에 따라 컨테이너를 관리한다.

도커 데몬 서버는 호스트 OS의 커널의 자체 기능으로 격리 공간을 만들고 컨테이너를 관리한다. 그리고 이는 클라이언트가 이러한 기능을 사용할 수 있도록 API 명세를 제공해주는 역할을 한다.

클라이언트가 컨테이너를 생성하거나 업데이트하기 위해서는 그에 맞는 API를 보내야한다. 이를 위해서 클라이언트는 도커 데몬이 제공하는 API 양식에 맞춰 요청을 작성한 후 도커 데몬으로 전달한다. 요청을 받은 도커 데몬은 커널을 통해 명령을 실행한다

0개의 댓글