본문 바로가기
개발환경

[개발환경 - 도커(3)] 도커(Docker) 기본 흐름, 기존 가상머신(VM)과의 차이, 도커 run 해보기 - 개발하는 지토

by 개발하는 지토 2020. 11. 21.

도커🐳를 사용할 때의 흐름

  1. 도커 CLI에 커맨드를 입력한다.
  2. 도커 서버 (도커 Deamon)가 커맨드를 받아서 그것에 따라 이미지를 생성하거나 컨테이너를 실행한다.

실제로 CLI에서 커맨드를 입력해보기

 

작업 표시줄에 숨겨진 아이콘 표시를 누르고 도커 아이콘이 있는지, Docker Desktop is running 이란 메세지를 확인한다.

 

그리고 커맨드 창을 열어서 " docker run hello-world " 명령어를 입력한다.

 

 

[이미지 설명]

 

Unable to find image ~~ : 이미지 Cache 보관 장소에서 해당 이미지를 찾지 못했다!

 

Pulling from library/hello-world : 도커 허브에서 해당 이미지를 찾아서 가져옴

 

Hello from Docker ! ~~ : 해당 이미지 실행 결과


도커🐳와 기존 가상머신(VM)의 차이

 

가상화 기술이 나오기 전

하나의 서버에서는 하나의 운영체제, 하나의 프로그램만 운영

 

하이퍼 바이저 기반의 가상화 출현

논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능 ( 다수의 게스트 OS 구동 가능 )

 

하이퍼바이저란?

  • 하이퍼 바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 함 ( 호스트 시스템 : window 나 linux 같은..)
  • 하드웨어를 사상화 하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자.

도커 컨테이너📦와 가상 머신(VM)의 공통점 ⭕

도커 컨테이너와 가상 머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법

 

도커 컨테이너📦와 가상 머신(VM)의 차이점 ❌

가장 큰 차이점은 격리된 환경을 얼마나 격리하는지의 차이

 

도커 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않아서 더 가벼움

  • 도커 컨테이너에서는 호스트 OS위에 어플리케이션의 실행 패키지인 이미지를 배포하기만 하면 돼서 쉽고 가벼움
  • VM은 VM을 먼저 띄우고 자원을 할당하고, 게스트 OS를 부팅하여 어플리케이션을 실행해야 해서 복잡하고 무거움

[정리]

도커 컨테이너📦

  • 도커 컨테이너는 호스트 OS에 이미지를 올려서 실행하기 떄문에 동일한 커널을 공유한다.
  • 도커 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있다.

 

가상 머신📦

  • VM에서 실행되는 모든 것들은 호스트 OS 또는 하이퍼바이저와 독립되어 있다. → 오버헤드가 크다.
  • 비교적 사용법이 간단하지만 굉장히 느리다.

어떻게 도커 컨테이너를 격리를 시킬까?

하이퍼바이저 기반 VM에서 발전되어서 나온 기술이 도커임

 

리눅스에서 쓰이는 C group(control groups)과 네임스페이스(namespace)를 이용해서 도커 컨테이너 격리 기술이 탄생함

 

C group(control groups)과 네임스페이스(namespace)

  • 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들임.

C Group

CPU, 메모리, Network Bandwith, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리

    → 어떤 어플이 사용량이 너무 많다면 그 어플을 C group에 집어넣어서 CPU와 메모리 사용 제한 가능

네임스페이스

하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술

    → 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술


이미지로 컨테이너 만들기‼️

⭐중요⭐

이미지가 포함하는 것 (이미지는 응용 프로그램을 실행하는데 필요한 모든 것(명령어, 파일 스냅샷)을 포함하고 있다)

  1. 시작 시 실행될 명령어 ex) run 명령어
  2. 파일 스냅샷(디렉토리나 파일을 카피한 것) ex) 애플리케이션 파일

이미지로 컨테이너 만드는 순서 🔢

  1. 도커🐳 클라이언트에 docker run {이미지} 입력
  2. 도커🐳 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨줌
  3. 이미지에서 가지고 있는 명령어(컨테이너가 실행될 때 사용될 명령어)를 이용해서 애플리케이션을 실행함

C Group과 네임스페이스를 도커 환경에서 사용할 수 있는 이유❕

 

커맨드 창에서 " docker version " 명령어를 실행하면!

OS 가 linux/amd64로 되어있는 걸 볼 수 있다.

 

도커 내부적으로는 자신의 OS 위에 리눅스 VM이 올라가 있고,

리눅스 환경 위에서 도커가 실행된다는 걸 확인할 수 있다.

댓글