2020-10-21 도커 강의정리(1) 도커란

도커

  • 도커란? 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행도록 설계된 도구.
  • 컨테이너 : 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공.
    • 코드와 모든 종속성을 패키지화하여 응용프로그램이 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 한다.
  • 컨테이너 이미지 : 코드, 런타임, 시스템도구, 시스템라이브러리 등 응용프로그램을 실행하는 데 필요한 모든것을 포함.
  • 컨테이너는 이미지의 인스턴스라고 생각하면 된다.

흐름

  • 사용하기 위해 도커 CLI에 커맨드를 입력 => 도커서버(Daemon)이 커맨드를 받아 이미지를 생성하거나 실행하거나 알맞은 작업을 수행한다.

    • $docker run hello-world
      

스크린샷 2020-09-30 오후 6.45.45

도커가상화 기술과 기존의 가상화 기술

스크린샷 2020-09-30 오후 6.55.23

공통점

  • 하드웨어에서 격리된 환경 내에 애플리케이션을 배치.

차이점

  • 격리된 환경을 얼마나 격리시키는지.
  • VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않아서 가볍다.(오버헤드가 적다)
  • 애플리케이션을 실행할때, 호스트OS에 실행패키지(이미지)를 배포하면 되지만, VM은 VM을 띄우고 게스트OS부팅하고 실행하기 때문에 무겁다.
  • 도커커는 호스트 OS에 올라가기 때문에 다른 컨테이너들과 동일한 커널을 공유한다.
  • 컨테이너내부에서 돌아가는 모든 프로세스는 호스트 OS에서 볼 수 있다.

기존방식(하이퍼 바이저기반)

  • 한대의 서버를 하나의 용도로만 사용하고 남는 리소스는 방치, 안정적이지만 비효율적이다.

  • 논리적으로 공간을 분할할 수 있게해준다.
  • VM이라는 독립적인 가상 환경의 서버를 이용할 수 있다.
  • 하이퍼바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게하는 기술, 하드웨어를 가상화하면 하드웨어와 각각의 VM을 모니터링하는 중간관리자이다.

하이퍼바이저

  • 네이티브 하이퍼바이저와 호스트형 하이퍼바이저로 나눌 수 있다.
  • 네이티브 하이퍼 바이저 : 하이퍼바이저가 하드웨어를 직접제어해서 자원을 효율적으로 사용가능, 별도의 호스트 OS가 없어서 오버헤드가 적다. 여러 하드웨어 서버를 세팅해야되서 설치가 어렵다.
  • 호스트형 하이퍼바이저
    • 호스트OS위에서 실행, 하드웨어 자원을 VM내부의 게스트 OS에 에뮬레이트하는 방식이라 오버헤드가 크다.
    • 게스트 OS종류에 대한 제약이 없고, 구현이 쉽다.
    • 많이 쓰이는 방식

스크린샷 2020-09-30 오후 6.53.31

  • 코어가 독립된VM환경으로 각각 간다. Core1에서 문제가 생겨도 Core2에 문제가 전혀없다.

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

  • 리눅스에 Cgroup(Control Group)과 네임페이스(namespace)를 활용
  • Cgroup : CPU, 메모리, Network bandwidth, I/O 등 프로세스 그룹의 시스템 리소스 사용량 관리 => 리소스를 많이 쓰는 프로그램을 Cgroup에 넣어서 CPU, 메모리 등 리소스 제한을 걸 수 있다.
  • 네임스페이스 : 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술. 경량 프로세스 가상화 기술

이미지로 컨테이너 만들기

  • 이미지는 애플리케이션을 실행하는데 필요한 모든것을 포함.
  • 필요한 것들
    • 시작시 실행될 명령어
    • 파일 스냅샷

이미지 만드는 순서

  1. Docker 클라이언트에 docker run image입력
  2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮긴다.

스크린샷 2020-09-30 오후 7.13.38

Written on October 21, 2020