Docker Containers vs. Virtual Machine(VM) 차이

Docker?

라이브러리 버전, 환경설정, 설치 파일 등의 문제로 내가 만든 프로그램이 내 개발환경 외부에서는 돌아가지 않을 때 솔루션 중 하나.

소프트웨어를 일관되게 빌드하고 실행, 배포하기 위해 사용!

개발/ 테스트/ 프로덕션을 모두 공통된 동일한 환경에서 실행 가능

 

* 빌드: 내가 개발한 개발환경을 그대로 패키징해서 Client(프로덕션 환경)가 사용하도록 한다.

           빌드한 파일은 Docker hub와 같은 공용 레포지토리에 올려 공유

 

도커 엔진위에서 OS나 다른 container와 충돌이 생기지 않게 별도로 독립된 Docker Container 에서 실행

 

예를 들어 맥북 위에 Docker를 사용하고 있다면,

         맥북 > 맥킨토시 운영체제 > 도커 > 도커컨테이너 >개별어플리케이션

∴ Light weight ↔ VM은 OS 자체를 내부에 갖고 있음 

 

다른 사람이 내가 만든 docker image를 사용하고 싶다면 docker hub(=Docker Registry) 에서 다운로드

도커 사용방법 순서

1. 소프트웨어의 환경변수 세팅, 디펜던시를 Dockerfile로 만들어 빌드 Buile 해서 Docker Image 생성

2. 내컴퓨터에서 그대로 실행하려면 docker command로 컨테이너 위에서 실행 가능 run

3. 다른 사람들도 사용할 수 있게 하고 싶다면(access 권한이 있다는 전제하에) Docker Registry (or 프로덕션 서버)에 올려서 공유

Virtual Machine(VM)

컴퓨터 하드웨어 단의 추상화 ∵ 하드웨어 안에 또다른 하드웨어(가상환경도 OS 필요)

 

Virtual Machine(VM)의 예시 

  • AWS의 EC2
  • 오픈스택의 Nova

  Docker Container Virtual Machine
장점 커맨드 라인(CLI) 애플리케이션은 만들기에 적합
light weight함
다수의 소프트웨어를 각 컨테이너에서 독립적으로 실행가능
다수의 소프트웨어를 각 VM단에서 독립적으로 실행가능
VM은 다른 하드웨어라서 상관없음(훨씬 더 호환성이 높음)
다른 컴퓨터임(매우 독립적)
단점 어디서 빌드, 실행되는지에 따라 호환 이슈
Host OS에 따라 지원하는 컨테이너 OS가 다름
그래픽 사용자 인터페이스(GUI) 개발 에는 한계가 있음
Cross-platform compatibility 지원 어려움
각 VM은 자신만의 OS 필요
유료 OS라면 라이센스 비용 필요
부팅하는데 시간이 걸림
OS위에 OS가 올라가는 거라서 자원을 많이 사용
VM들끼리 자원을 나눠서 사용 
몇개의 SW밖에 돌릴 수 없음