개요.

도커 관련 정리 포스터.

나는 도커를 모른다.

 

VM, Hypervisor 링크

VM(Virtual Machines)

  • 컴퓨터의 에뮬레이션으로, 프로그램을 실제 컴퓨터처럼 실행한다.
  • VM 은 하이퍼바이저를 통해 물리적 기계위에서 구동된다.
    • 한편 하이퍼바이저는 호스트머신이나 베어메탈(소프트웨어가 전혀 담기지 않은 하드웨어) 위에서 실행된다.
  • 맨 위부터 순서대로 하면 VM → Hypervisor → OS → HW 순서대로 생각할 수 있다.

Hypervisor (하이퍼바이저) (=> VM 의 운영체제라고 볼 수 있다.)

  • VM 이 실행되는 소프트웨어나 펌웨어 혹은 하드웨어를 뜻한다. 하이퍼바이저들은 호스트 머신이라 불리는 물리적 기계 위에서 돌아가, 호스트 머신은 VM 에 램과 CPU 자원을 제공한다.
  • 해당 자원들은 VM 들이 분배받아서 사용하는데, 사용자가 원하는 대로 할당을 할 수 있어서 다른 VM 보다 특정한 VM 이 더 많은 자원을 할당받을 수 있다.
  • 호스트 머신 위에서 동작하는 하이퍼바이저를 이용, 하이퍼바이저 위에 돌아가는 VM 을 게스트머신(Guest Machine) 이라고 부른다.
    • 이 게스트 머신은 그 애플리케이션을 실행하기 위한 모든 것들 (시스템 바이너리, 라이브러리 등) 과 같은 애플리케이션을 포함하며, 가상화된 네트워크 어댑터, 저장소, CPU 등의 모든 하드웨어 스택도 포함한다. 즉 자신안에 온전한 하나의 게스트 운영체제를 가지고 있는 것이다.
  • 게스트 머신은 자신만의 자원을 할당받은, 하나의 독립된 유닛처럼 작동한다. 외부시점에서 보면 이것은 호스트 머신의 자원을 다른 VM들과 공유하는 또 하나의 VM 임을 알 수 있다.

 

왜 우리가 도커를 사용해야 하는가.

왼쪽이 VM, 오른쪽이 Docker Container 이다.

이미지 출저

도커가 필요한 이유

  • 도커 컨테이너는 프로세스 단위로 격리환경을 만들어놓기 때문에 성능 손실이 거의 없다.
    • 컨테이너에 필요한 커널은 호스트의 커널을 공유하여 사용
    • 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행파일만 존재하기 용량또한 가상머신에 비해서 상대적으로 작다.
    • 컨테이너는 격리된 공간이기 때문에 호스트 OS 에 아무런 영향을 끼치지 않는다.
  • 도커 이미지는 가상 머신의 이미지와 달리 커널을 미포함한다. 따라서 이미지의 크기가 크지 않고, 이미지 내용을 레이어 단위로 구성하기 때문에 중복되는 레이어를 재사용할 수 있다. 그러므로 애플리케이션 배포를 빠르게 수행 가능하다.
  • 여러 애플리케이션의 독립성과 확장성이 높아진다.
    • MSA 에 부합하는 형태로 구성할 수 있다.

 

Dockerfile

  • Dockerfile 을 빌드하면 도커이미지를 만든다.
  • Dockerfile 은 서버 운영 기록을 코드화시켜놓은 파일이다.
  • Dockerfile 을 빌드하여 생성된 결과물을 image 라고 부른다.
  • 도커는 서로 다른 운영기록을 가진 서버를 동일한 환경에서 실행시킬 수 있도록 해준다.

 

Image vs Container

  • Image 는 서비스 운영에 필요한 서버프로그램으로 소스코드, 컴파일된 실행환경을 묶은 형태이다.
  • Image 는 docker hub 라는 저장소에 올리고 공유하고 다운받을 수 있다.
  • Container 는 애플리케이션을 환경에 구애받지 않고 실행시키는 기술이다. 애플리케이션 뿐만 아니라 애플리케이션을 실행하는데 필요한 모든 환경을 포함하고 있다. Container 는 host os 위에 실행되는 격리된 공간이다.
  • Container 는 Image 를 실행한 상태라고 볼 수 있다.

☞ 이미지는 실행파일이고, 컨테이너는 프로세스이다.

 

docker-compose

  • Dockerfile 을 하나씩 관리하면 의존관계가 있는 컨테이너의 실행순서는 특정한 Dockerfile 의존성을 가질 수 밖에 없다. 따라서 해당 컨트롤을 수동으로 하지 않고 자동화하기 위해서 나온 것이 도커 컴포즈이다. 
  • docker-compose 를 이용하면, 다수의 컨테이너를 의존관계를 설정하여 실행시키기 용이하다.

참고링크

도커컴포즈를 활용하여 완벽한 개발환경 구성하기

도커컴포즈 활용법

시작하세요! 도커/쿠버네티스

Posted by doubler
,