본문 바로가기
엄지인사이트 엄지인사이트

도커 컨테이너는 가상머신과 무엇이 다를까? Namespace와 Cgroup의 작동 원리

읽는 시간 약 8분

도커 컨테이너와 가상머신은 무엇이 다를까

개발자나 IT 업계에 조금이라도 관심이 있다면 도커(Docker)라는 이름을 한 번쯤 들어보셨을 것입니다. 요즘 개발 환경에서 도커는 선택이 아닌 필수처럼 여겨집니다. 하지만 도커 컨테이너가 기존의 가상머신과 정확히 어떤 차이가 있는지 명확하게 이해하기는 쉽지 않습니다. 겉보기에는 둘 다 운영체제 안에서 독립된 공간을 만들어 프로그램을 실행하는 것 처럼 보이기 때문입니다.

가상머신과 도커 컨테이너의 가장 근본적인 차이는 하드웨어를 가상화하느냐 운영체제를 공유하느냐에 있습니다. 이 차이를 이해하는 것은 단순히 기술 지식을 넓히는 것을 넘어 서버 비용을 절감하고 애플리케이션 배포 속도를 극적으로 높이는 실용적인 기반이 됩니다. 지금부터 도커가 어떻게 가상머신과 다른지 그 핵심 원리인 네임스페이스와 c그룹을 통해 알기 쉽게 살펴보겠습니다.

가상머신이 무거울 수밖에 없는 이유

가상머신은 하이퍼바이저라는 기술을 사용해 물리적인 하드웨어를 완전히 쪼개서 사용합니다. 우리가 잘 아는 브이엠웨어(VMware)나 버추얼박스(VirtualBox)가 대표적인 예입니다. 가상머신 하나를 만들면 그 안에는 CPU와 메모리뿐만 아니라 완전한 형태의 게스트 운영체제가 통째로 설치됩니다.

이러한 구조는 완벽한 독립성과 보안을 보장한다는 장점이 있지만 치명적인 단점도 있습니다. 윈도우 서버 위에 우분투 가상머신을 올린다면 우분투를 구동하기 위한 수많은 시스템 자원과 용량이 낭비됩니다. 가상머신 하나를 띄우는 데 수 기가바이트의 용량이 필요하고 부팅하는 데도 꽤 오랜 시간이 걸리는 이유가 바로 여기에 있습니다.

도커 컨테이너는 운영체제를 통째로 복사하지 않는다

반면 도커 컨테이너는 호스트 운영체제의 커널을 그대로 공유합니다. 리눅스 기반에서 도커를 실행한다면 컨테이너들은 호스트의 리눅스 커널을 함께 사용하면서 각자 독립된 공간에서 실행됩니다. 운영체제를 통째로 올릴 필요가 없기 때문에 컨테이너의 용량은 메가바이트 단위로 매우 작고 부팅 속도도 몇 초 만에 끝납니다.

그렇다면 어떻게 운영체제를 공유하면서 서로 다른 독립된 공간을 만들 수 있을까요. 마치 각자 컴퓨터를 따로 쓰는 것처럼 파일 시스템이나 네트워크를 격리할 수 있는 비밀이 바로 리눅스 커널의 핵심 기능인 네임스페이스와 c그룹에 숨어 있습니다.

격리된 세계를 만드는 기술 네임스페이스

네임스페이스는 도커 컨테이너에게 각자의 독립된 우주를 선사하는 기술입니다. 현실 세계에서 김철수라는 이름을 가진 사람이 여러 명 존재할 수 있듯이 네임스페이스는 시스템 자원의 이름표를 격리하여 서로 다른 컨테이너가 같은 이름을 쓰더라도 충돌이 나지 않도록 만듭니다.

도커가 사용하는 대표적인 네임스페이스 종류는 다음과 같습니다.

  • 프로세스 네임스페이스는 컨테이너 내부에서 실행 중인 프로세스들만 볼 수 있게 감싸줍니다. 호스트 컴퓨터의 다른 프로세스는 숨겨집니다.
  • 네트워크 네임스페이스는 각 컨테이너마다 고유한 네트워크 인터페이스와 IP 주소를 할당하여 마치 별도의 네트워크 장비처럼 동작하게 만듭니다.
  • 마운트 네임스페이스는 파일 시스템의 마운트 지점을 격리하여 컨테이너마다 서로 다른 파일 구조를 가질 수 있게 합니다.
  • 사용자 네임스페이스는 컨테이너 내부의 루트 권한과 호스트의 루트 권한을 분리하여 보안을 강화합니다.
  • IPC 네임스페이스는 프로세스 간 통신 자원을 격리합니다.
  • 호스트네임 네임스페이스는 컨테이너마다 독립된 호스트 이름을 설정할 수 있게 합니다.

이러한 네임스페이스 덕분에 사용자는 컨테이너 안에 접속했을 때 마치 자신이 완전히 독립된 컴퓨터를 쓰고 있다고 착각하게 됩니다. 하지만 실제로는 호스트 운영체제 위에 시각적인 장막을 쳐놓은 것과 같습니다.

자원 사용량을 철저하게 통제하는 c그룹

네임스페이스가 공간을 나누는 역할이라면 c그룹은 자원의 양을 조절하는 문지기 역할을 합니다. c그룹은 컨트롤 그룹의 줄임말이며 특정 프로세스 집합이 사용할 수 있는 시스템 자원의 한계를 지정하고 모니터링하는 리눅스 커널 기능입니다.

만약 컨테이너 하나가 무한 루프에 빠져서 CPU를 백 퍼센트 사용하거나 메모리를 전부 잡아먹는다면 어떻게 될까요. c그룹이 없다면 그 컨테이너 하나 때문에 호스트 전체가 다운되거나 다른 서비스까지 먹통이 될 것입니다.

c그룹을 사용하면 다음과 같은 세부적인 제어가 가능해집니다.

  • 메모리 사용량을 특정 기가바이트 이하로 제한하고 이를 초과하면 프로세스를 강제 종료할 수 있습니다.
  • CPU 코어의 사용 비율을 제한하거나 특정 코어만 전담해서 쓰도록 지정할 수 있습니다.
  • 디스크 입출력 속도를 제한하여 특정 컨테이너가 디스크를 독점하는 현상을 막습니다.
  • 네트워크 대역폭을 제어하여 트래픽 편중을 방지합니다.

이처럼 c그룹은 여러 개의 컨테이너가 하나의 서버 자원을 공평하고 안전하게 나누어 쓸 수 있도록 돕는 핵심 장치입니다.

도커와 가상머신에 대한 흔한 오해 바로잡기

도커가 가상머신보다 가볍고 빠르다는 이유로 가상머신을 완전히 대체할 수 있다고 생각하기 쉽지만 이는 사실과 다릅니다. 둘은 대체 관계라기보다는 용도가 다른 상호보완적인 기술에 가깝습니다.

가장 큰 오해 중 하나는 도커 컨테이너가 가상머신만큼 보안이 완벽하다는 믿음입니다. 도커 컨테이너는 호스트 커널을 공유하기 때문에 커널의 취약점을 파고드는 공격이 발생하면 호스트 시스템 전체가 위험해질 수 있습니다. 반면 가상머신은 하이퍼바이저가 하드웨어 레벨에서 완전히 격리하기 때문에 보안성이 훨씬 뛰어납니다. 따라서 금융권이나 민감한 개인 정보를 다루는 곳에서는 여전히 가상머신 기반의 인프라를 선호합니다.

또 다른 오해는 윈도우 환경에서 리눅스 도커를 그대로 돌릴 수 있다는 생각입니다. 윈도우나 맥OS에서는 도커를 실행할 때 내부적으로 경량 가상머신을 먼저 띄우고 그 위에 리눅스 커널을 올리는 방식을 사용합니다. 따라서 윈도우 환경에서는 리눅스 서버에서만큼의 가벼운 성능을 온전히 체감하기 어려울 수 있습니다.

비용 효율적으로 인프라를 구성하는 실용적인 팁

도커의 네임스페이스와 c그룹 원리를 이해하면 클라우드 서버 비용을 획기적으로 줄일 수 있습니다. 기존에는 웹서버와 데이터베이스를 각각 다른 가상머신에 띄워야 했기에 서버 두 대 비용이 고스란히 발생했습니다.

하지만 도커를 활용하면 하나의 강력한 클라우드 서버 안에 여러 개의 컨테이너를 띄워 웹서버와 데이터베이스를 동시에 격리된 상태로 운영할 수 있습니다. 하드웨어 자원을 낭비 없이 꽉 채워 쓸 수 있기 때문에 서버 대수를 대폭 줄여 클라우드 비용을 최소화할 수 있습니다.

개발 환경을 구축할 때도 팁이 있습니다. 로컬 컴퓨터에 데이터베이스나 파이썬 환경을 직접 설치하면 버전 충돌로 인해 지옥을 맛볼 수 있습니다. 이럴 때 도커를 사용하면 필요한 환경만 컨테이너로 띄웠다가 작업이 끝나면 깔끔하게 지울 수 있어 내 컴퓨터의 환경을 항상 깨끗하게 유지할 수 있습니다.

자주 묻는 질문으로 정리하는 핵심 내용

도커 컨테이너는 윈도우 환경에서도 리눅스처럼 가볍게 작동하나요. 앞서 언급했듯이 윈도우나 맥에서는 가상화 레이어가 한 층 더 추가되기 때문에 리눅스 운영체제에서 직접 실행할 때보다는 자원을 조금 더 소모하지만 여전히 풀 가상머신보다는 훨씬 가볍고 빠르게 동작합니다.

컨테이너 내부에서 오류가 나서 시스템이 다운되면 호스트 컴퓨터도 멈추나요. c그룹이 자원 사용량을 제한하고 있고 네임스페이스가 프로세스를 격리해 두기 때문에 대부분의 경우 문제의 컨테이너만 죽고 호스트나 다른 컨테이너는 안전하게 유지됩니다. 다만 커널 레벨의 심각한 오류인 경우에는 영향을 받을 수 있습니다.

가상머신과 도커 컨테이너를 함께 사용할 수도 있나요. 실제 많은 기업들이 클라우드 위의 가상머신 인프라 안에 다시 도커 컨테이너를 올리는 방식을 사용합니다. 보안과 유연성을 모두 챙길 수 있는 가장 현대적인 인프라 구성 방식 중 하나입니다.

creambin365
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.