컨테이너와 가상 머신(Virtual Machine, VM)

컴퓨터의 기본 실행 환경

  컴퓨터는 운영 체제(OS: Windows, macOS, Linux 등) 위에서 애플리케이션을 실행한다. 애플리케이션이 실행되려면 프로세서(CPU), 메모리(RAM), 디스크 저장소 등의 하드웨어 및 프로그램이 실행되기 위한 소프트웨어 환경(라이브러리, 설정 등)이 필요하다.

 

 이때 동일한 프로그램이라도 컴퓨터의 설정, 라이브러리 버전, 운영 체제 등에 따라 실행이 달라질 수 있다.

"내 컴퓨터에서는 실행되는데 쟤 컴퓨터에서는 안 돼요!"

이를 해결하기 위해 일관된 실행 환경을 제공해야 한다. 

 

가상화(Virtualization) 기술

 가상화는 물리적 자원(예: CPU, 메모리, 디스크, 네트워크 등)을 소프트웨어적으로 분리하여 논리적 자원으로 변환하는 기술이다. 이로 인해 사용자나 애플리케이션은 물리적 장치가 아닌, 가상의 컴퓨터나 서버를 사용하게 된다.

 

가상 머신(VM, Virtual Machine)

  가상 머신은 하나의 컴퓨터 안에 또 다른 독립적인 컴퓨터를 생성하는 기술이다. 각 가상 머신은 자체 운영 체제를 포함, 독립적으로 실행되며, 실제 컴퓨터처럼 동작한다.

  완전히 독립적이라 서로 간섭하지 않고, Window에서 Linux를 실행하는 것과 같이 운영 체제 종류가 달라도 실행할 수 있다. 운영 체제가 포함되기 때문에 무겁고, 많은 리소스가 필요하며, 느릴 수 있다.

 

컨테이너(Container)

 컨테이너는 가상 머신과 비슷한 목적(독립된 실행 환경 제공)을 가지지만 운영 체제를 공유하면서 훨씬 가볍고 빠르다.

 

가상 머신 vs 컨테이너

 가상 머신은 각각의 OS를 포함하지만, 컨테이너는 호스트 OS를 공유하며, 컨테이너는 애플리케이션 실행에 필요한 최소한의 소프트웨어와 라이브러리만 포함된다.

 컨테이너는 운영 체제를 포함하지 않아 크기가 작고 실행 속도가 빠르며 한 대의 컴퓨터에서 더 많은 컨테이너를 실행할 수 있다. "내 컴퓨터에서 실행되면, 어디서든 실행된다"

 컨테이너는 호스트 OS와 강하게 연결되어 호스트와 동일한 커널만 사용할 수 있다. (Linux 기반 컨테이너는 Linux에서만 실행)

 

쉽게 설명하자면

 각 가상 머신은 하나의 집을 새로 짓는 것과 같다. 집(가상 머신)마다 벽(운영 체제)이 독립적. 필요한 모든 것이 포함되어 있지만, 건축 비용이 높고 시간이 많이 걸린다.

 컨테이너는 같은 건물 안의 여러 방(컨테이너)을 사용하는 것과 같다. 각 방은 서로 독립적이지만, 건물(운영 체제)를 공유하며 방마다 필요한 가구(소프트웨어)만 추가하면 되므로 더 가볍고 빠르다.

 

도커(Docker)가 컨테이너 기술을 쉽게 사용할 수 있도록 도와주는 플랫폼이다.