본문 바로가기
Server/Docker

[Docker] 란 ? VM과 차이, Docker 설치 및 기본 명령어를 중심으로

by 꼬바리 2021. 3. 25.

Docker Logo

 

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

 

이 Docker라는 것은 상당히 특이한데, 기존의 VM (Virtual Machine)은 특정 Hardware의 Resource를 할당하여

동작시켰지만 Docker는 VM과 다르게 OS (Operating System; 운영체제)를 가상화하여 동작한다는 것이다.

 

이게 대체 무슨 말이냐...

 

일단 가상화 기술에 대해서 먼저 알아봐야겠지?

 

가상화 기술이란 것은 물리적인 하드웨어 자원(CPU, Memory 등)을 논리적인 리소스로 제공하기 위한 기술이라고 일컫는다.

말그대로 물리적인 Machine에 실제 Machine처럼 보이게 만드는 기술, 즉 논리적인 Machine이라고도 하는데

이 가상화 기술도 크게 3종류로 나눌 수 있다.

 

  • 호스트 OS형

호스트 OS형은 물리적인 하드웨어 자원 위에 OS를 설치해서 그 위에서 가상화 소프트웨어와 Virtual Machine을 움직이는 방식을 말한다. 따라서 이 같은 경우엔 호스트 Machine과 Virtual Machine 간의 OS가 서로 다를 수 있다.

대표적인 예로 우리가 흔히 알고 있는 VMware, VirtualBox가 이에 속한다.

 

  • 하이퍼바이저형

하이퍼바이저형은 호스트 OS를 필요로 하지 않는 타입의 가상화 방식을 일컫는다. 즉, 하이퍼바이저라는 소프트웨어를 물리적인 하드웨어 자원 위에 직접 동작하게 함으로써 하이퍼바이저 소프트웨어 위에서 개별로 가상머신을 동작하게 만든다. 주로 VMware ESXi, Linux에서의 Xen/Citrix XenServer Microsoft Hyper-V 등이 있다.

 

  • 컨테이너형

컨테이너형은 좀 독특하다. 호스트 OS위의 Application Layer 에서 개개의 Application 형태로 동작한다. 이 개개의 Application을 컨테이너라고 하며 호스트 OS위에서 동작한다. 역설하자면, 개개의 컨테이너는 OS Kernel을 공유하여 동작하기 때문에 호스트 OS 와 컨테이너 OS는 같을 수 밖에 없다. 근데 여기서 중요한 것은 하나의 컨테이너 내에서 환경변수를 설정했을 땐 다른 컨테이너에서 동일하게 먹히지 않는다는 것이다. 

 

Container와 Virtual Machine의 구조를 보면 훨씬 이해하기 쉽다.

(참조 : Docker Official Site)

 

Virtual Machine의 구조

 

일단 Virtual Machine은 Physical hardware을 추상화하여 동작한다. 쉽게 말해서, 하나의 Machine 위에서 여러 개의 VM이 동작하고, 각각 VM은 OS, binary & Library file이 있어야 한다. 그렇기 때문에 이로인해서 저장공간이 하나의 Machine위에 동작하는 VM이 증가할수록 낭비가 심해진다. 

Container의 구조

 

하지만, Docker의 Container 구조는 Application Layer에서 종속되는 패키지 코드를 추상화하여 동작한다. 즉, Host OS 위에서 Docker가 동작하여 여러개의 App 형태로 동작을 하는 것이다. 그렇기 때문에 VM의 문제점이었던 자원할당에 대한 문제점도 다른 컨테이너와 함께 OS Kernel을 공유할 수 있어 문제점을 보완할 수 있고 저장공간이 별개로 필요하지 않기 때문에 저장공간 또한 낭비를 막을 수 있다.

 

 특히 이 컨테이너는 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 지금 현재는 백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 컨테이너로 추상화 할 수 있고 조립PC, AWS, Azure, Google Cloud 등 어디에서든 실행할 수 있다고 한다. (오호라...)


그런데, KISTI에서 Internship을 하면서 여기 연구원 분들이 Kubernetes를 자꾸 외치시길래 뭘까하고 계속 고민만 했지 정작 찾아본적은 없었다. 별개로 Kubernetes에 대한 것도 간략하게 언급해보자면,

 

자, Docker에선 컨테이너를 사용하면 Machine의 자원을 효율적으로 사용할 수 있다고 위에서 언급한 바 있다.

근데 이게... 만약 컨테이너가 기하급수적으로 증가한다면? 컨테이너를 관리하고 운영하는데 상당히 어려워져서 운영상의 효율성이 저하된다. 이러한 배경을 시초로 출현하게 된 것이 바로 Kubernetes인 것이다. 

 

Kubernetes는 Container Orchestration platform 중 하나로 구글이 자사 서비스를 위해 개발했던 Borg에서 얻은 운영 노하우를 오픈소스를 공개한 것이라고 한다. 

 

음... 그래서 Container간 Orchestration을 강조를 하셨던 게로군...

 

다시 본론으로 돌아와서, 

 

Docker에서 Container 외에 Image 란 것도 중요하다.

Image란 컨테이너 실행 파일과 설정값 등을 포함하는 것으로 상태값을 가지지 않고 변하지 않는 것 (Immutalble)이라고

정의하고 있다. 

 

출처 : https://corona-world.tistory.com/15
728x90
반응형

'Server > Docker' 카테고리의 다른 글

🐳 Docker 도커 - #1 기본 명령어 모음  (0) 2021.05.18
Docker 명령어 정리  (0) 2021.05.18
[Docker] Docker란 무엇일까?  (0) 2021.03.22
[Docker] 란?  (0) 2021.03.22
[Docker] - Docker란 무엇이고 왜 사용했는가?  (0) 2021.03.22

댓글