가상머신(VM)
가상 머신(Virtual Machine, VM)은 물리적 하드웨어 시스템(오프프레미스 또는 온프레미스에 위치)에 구축되어 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경이다.
PC를 물리적으로 구성하는것이 아닌 기존 PC의 리소스를 나누어 가상의 PC를 구현하는 것이다.
Docker
Docker는 Linux기반의 Container Runtime오픈소스다. Container는 VM과 유사하며, 동시에 VM보다 훨씬 가벼운 형태로 배포가 가능하다. VM을 구축하기위해서 기존의 Host OS를 파티션으로 분리한 뒤 Hypervisor의 위에 -VMware, KVM, Xen etc- 새로운 가상머신을 쌓아 올린다. 일종의 x86 하드웨어를 가상화 하는 것이다. 결과적으로 VM위에는 Linux, Windows etc OS설치가 가능하다.
VM과 Docker의 차이
Container의 동작은 VM과 약간 다르다.
VM의 동작이 Hypervisor위에서 이루어지는것처럼 Container는 Docker Engine에 의해 Host에서 실행된다. Container는 Linux기반의 OS에서만 수행이 가능하다. Docker는 VM처럼 Hardware를 가상화하지 않고, Continer를 Host로부터 격리시킨다. Container에는 OS Image가 들어있지 않아서 Host OS의 Kernel을 그대로 사용하되, Host와 Container사이의 OS오차만을 Container 내에 같이 Packing한다. Container에서 수행한 명령어는 실제로 Host OS에서 수행된다. Host OS와 Process 공간을 공유하는 것이다.
Repository Connection
Image & Container
Image는 Container로서 실행되기 직전의 상태로 구성된 -운영에 필요한 서버프로그램, 컴파일 된 실행파일, 소스코드 및 라이브러리 etc- 파일이다. DockerEngine이 Image를 실행시키면 Container로서 격리된 공간에서 가상머신으로서 동작하게 된다.
Repository Connection
Repository Connection은 Docker의 특징중 하나로 Image를 중앙의 Repository에 저장하고 다른 환경에서 로드해 사용할 수 있다. VCS -Version Control System- 같은 개념인데, 이를 통해 Application들을 Container로 패키징해서 다른 환경으로 쉽게 옮길 수 있다.
예를 들어 local pc에서 mysql, apache, tomcat등을 각 컨테이너에 넣어서 개발을 한 후에, 테스트 환경등으로 옮길때, Container를 repository에 저장했다가, 테스트환경에서 pull하여 똑같은 테스트환경을 꾸밀 수 있다는 것이다. Container에는 모든 application과 설치 파일, 환경 설정 정보 등이 들어 있기 때문에, 손쉽게 패키징 및 설치가 가능하다는 장점이 있다.
여기서 고려해야할점은 Docker는 아쉽게도 아직까지 개발중이고, 정식 릴리즈 버전이 아니다. 그래서, 아직까지는 production - 운영환경 - 에 배포를 권장하고 있지 않다. 단 개발환경에서는 모든 개발자가 동일한 개발환경을 사용할 수 있게 할 수 있고, 또한 VM 보다 가볍기 때문에, 개발환경을 세팅하는데 적절하다.
Reperence
가상 머신(버추얼 머신), 가상 서버, 가상 OS 개념 및 작동 방식
가상 머신이란 물리 머신의 리소스를 추상화하여 생성된 격리된 가상 컴퓨팅 환경을 뜻합니다. 가상머신은 서버 통합 목적으로 많이 사용되며, 게스트 OS 역할을 합니다.
www.redhat.com
Docker: Accelerated, Containerized Application Development
Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.
www.docker.com