Victoree's Blog

[0] Docker에 대해 알아봅시다! 본문

Infra/Docker

[0] Docker에 대해 알아봅시다!

victoree 2021. 4. 26. 21:56
728x90

1. Docker란 무엇인가

  • 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구
  • 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계
  • 컨테이너 In Server
    • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
    • AWS, Azure, Google Cloud 등 어디서든 실행가능하게 해줌

컨테이너

  • 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위
  • 이미지의 인스턴스이며 프로그램을 실행함

컨테이너 이미지

  • 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행가능한 소프트웨어 패키지
  • 런타임에 컨테이너가 되고, 도커 컨테이너의 경우 도커 엔진에서 실행될 때 이미지가 컨테이너가 됨
  • 리눅스와 윈도우 기반 어플리케이션 모두에서 사용할 수 있는 컨테이너화된 소프트웨어는 인프라에 관계없이 항상 동일하게 실행됨
  • 컨테이너는 소프트웨어를 환경으로부터 격리시키고, 개발과 스테이징의 차이에도 불구하고 균일하게 작동하도록 보장함
  • 프로그램을 실행하는 데 필요한 설정이나 종속성들을 가지고 있음

도커 사용 Flow

  • 도커 클라이언트에서 $ docker run hello-world 입력
  • 도커 서버 👉 [이미지 Cache 보관장소]에서 hellow-world라는 이미지를 찾음
  • 없을 시 도커 허브(이미지들을 보관)로 이동하여 pull 하여 가져옴

 

2. 도커와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해

1) 가상화 기술 나오기 전에는?

  • 한대의 서버를 하나의 용도로만 사용
  • 남는 서버 공간 방치
  • 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영
  • 안정적이나 비효율적임

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

하이퍼바이저

  • 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어, 그리고 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자
  • 네이티브 하이퍼바이저  호스트형 하이퍼바이저-윈도우/리눅스..로 구분됨
    • 네이티브 하이퍼바이저
      • 하드웨어를 직접 제어
      • 별도의 호스트 OS가 없어 오버헤드가 적음
      • 여러 하드웨어 드라이버를 설치해야 하므로 설치가 어려움
    • 호스트형 하이퍼바이저
      • 일반적인 소프트웨어 OS 위에서 실행됨 [호스트 OS 위에서]
      • 하드웨어 자원을 VM 내부의 게스트 OS의 에뮬레이트 하는 방식
      • 게스트 OS 종류에 대한 제약이 없음
  • 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용가능

 

3. 컨테이너 가상화 기술

Docker VS 기존 가상화기술(VM)

Docker

  • 하이퍼바이저와 게스트 OS가 필요하지 않아 더 가벼움
  • 어플리케이션을 실행할 때, 호스트 OS 위에 어플리케이션의 실행 패키지인 이미지만 배포하면 됨
  • 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유함
  • 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있음

VM

  • 어플리케이션을 실행할 때, VM을 띄우고 자원을 할당하고 게스트 OS를 부팅하여 어플리케이션을 실행해야함
  • 가상머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영체제 또는 하이퍼바이저와 독립되어 있음
  • 가상 머신 플랫폼은 특정 VM에 대해 가상화 프로세스를 관리하기 위해 프로세스를 시작, 호스트 시스템은 그것의 하드웨어 자원을 VM에 할당함
  • 오버헤드가 큼

공통점

  • 기본 하드웨어에서 격리된 환경 내에 어플리케이션을 배치하는 방법

차이점

  • 격리된 환경을 얼마나 격리시키는 가의 차이
도커 컨테이너에서 돌아가는 APP은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트이 다른 컨테이너와 동일한 커널을 공유한다.
결과적으로, 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템(모든 프로세스를 나열할 수 있는 충분한 권한)에서 볼 수 있다!

4. Docker 프로세스 도면

  • 커널은 공유됨
  • 컨테이너끼리 격리는 되어있지만, 하드웨어는 공유함

 

5. 도커 컨테이너를 격리시키는 방법

C Group

  • CPU, 메모리, Network Bandwidth, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리
  • 어떤 어플이 사용량이 너무 많은 경우, C group에 집어 넣어서 CPU와 메모리 사용 제한가능

네임스페이스

  • 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술
  • 별개의 독립된 공간을 사용하는 것 처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술

Cgroup과 네임스페이스는 Linux 환경의 기능

  • docker client의 환경을 보면 OS가 리눅스임

 

Docker 이미지

  • 응용 프로그램을 실행하는데 필요한 모든 것을 포함함
  • 필요한 요소들
    • 컨테이너가 시작될 때 실행되는 명령어
      • run kakaotalk
    • 파일 스냅샷
      • 컨테이너에서 카카오톡을 실행하고 싶다면, (카카오톡을 실행하는데 필요한 파일) 스냅샷
      • 디렉토리나 파일을 카피한 것

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

  1. Docker client에 $ docker run <이미지>를 입력해줌
  2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨줌
  3. 이미지에서 가지고 잇는 명령어를 이용해서 카카오톡을 컨테이너에 실행시켜줌
728x90

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

[5] Dockerfile  (0) 2021.05.28
[4] Docker 이미지  (0) 2021.04.26
[3] Docker Logging 및 자원 할당  (0) 2021.04.26
[2] Docker Network  (0) 2021.04.26
[1] 도커 이미지와 컨테이너  (0) 2021.04.26
Comments