DevOps/Docker

[Docker] Container vs VM

SeungbeomKim 2023. 8. 31. 15:27
반응형

Container와 VM은 애플리케이션을 it 인프라 리소스로부터 독립적으로 만드는 기술입니다.

 

컨테이너는 애플리케이션을 구동하기 위해 필요한 설정파일, 라이브러리, 환경 설정 등이 담겨있는 패키지입니다. 애플리케이션의 이미지를 개별적인 파일 시스템 안에서 실행할 수 있습니다.

 

가상 머신은 하나의 Host OS에서 개별적인 운영체제를 실행할 수 있을 뿐만 아니라, 애플리케이션을 실행하는데 필요한 파일들이 포함된 가상 머신을 생성할 수 있습니다.(Host OS와 분리된 Guest OS 환경에서 개발 및 테스트 진행)

 

이들의 차이점을 파악하고 Container 기반 기술인 Docker의 장점을 알아보려고 합니다. 

 

VM (Virtual Machine)

  • 가상 머신은 물리적인 서버 위에서 Hypervisor(VirtualBox, VMware)를 통해 여러 개의 가상 환경을 생성
  • 독립적 운영체제(OS) 및 가상 하드웨어를 가지고, 이로 인해 물리적인 서버 위에서 여러 운영체제 실행 가능
  • VM은 독립적인 운영체제와 파일 시스템을 가지므로, 한 VM에서 발생하는 문제가 다른 VM에 영향을 미치지 않습니다.(격리성, 안정성 보장)
  • 한 운영체제 위에서 동일한 애플리케이션을 각각의 고립된 환경에서 구동하기 위해서는 2개의 Virtual Machine 필요
  • VM을 사용하면 VM 내에 운영체제를 포함하고 있기 때문에 굉장히 무겁고 시작하는데도 오래 걸리게 됩니다.

Container

  • 하드웨어에 설치된 운영체제(Host OS)에서 Container Engine이라는 소프트웨어를 설치하면, 개별적인 컨테이너를 만들어서 각각의 애플리케이션을 고립된 환경에서 구동할 수 있게 해 줍니다.
  • VM은 운영체제를 포함하지만, Container는 운영체제를 포함하지 않습니다. 대신 Container Engine이 Host OS에 접근하여 필요한 것들을 처리하는 방식입니다.
  • 따라서, OS가 포함된 VM보다 더 빠르고 효율적인 실행 환경과 확장을 제공해 줍니다.

컨테이너는 하나의 소프트웨어 유닛으로, 컨테이너 안에 Application, dependecies, System tools를 하나로 묶어 다른 서버나 다른 pc에서 쉽게 배포하고 안정적으로 구동할 수 있게 해 줍니다. 예를 들어, app.js 같은 파일을 외부 서버에 배포하려면 npm과 같은 외부 라이브러리나 dependencies, config 같은 환경 설정을 일일이 해줘야합니다. 

 

개발자가 일일히 본인 PC에 이러한 설정들을 해주기 번거롭기도 하고 본인 PC에서는 애플리케이션 구동이 잘 되지만, 웹 서버에서는 안 되는 사례들이 있을 수 있습니다. 이러한 문제점을 한 번에 해결해 주는 기술이 바로 Container 기반 기술인 docker입니다. Container가 있기에 앞서 설명드린 번거로움을 없앨 수 있을 뿐만 아니라 Docker Engine을 통해 가볍고 빠르게 애플리케이션을 구동할 수 있게 되었습니다.

 

다음시간에는 Docker 사용 방법과 명령어, Dockerfile, Docker-compose를 이용해 Springboot, Mysql을 연동하는 과정에 대해 포스팅하겠습니다.

 

<참고 자료>

https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/

 

컨테이너와 VM 비교 - 배포 기술 간의 차이점 - AWS

컨테이너와 가상 머신을 사용하면 여러 환경에서 실행할 수 있도록 애플리케이션을 완전히 격리할 수 있습니다. 컨테이너와 가상 머신은 기본 인프라를 가상화하거나 추상화하므로 사용자가

aws.amazon.com

 

반응형