도커의 개념 및 가상화 원리


[들어가기 전에]

지금부터 정리할 도커 학습 정리는 인프런의 ‘따라하며 배우는 도커와 CI환경’ 강의를 정리한 것입니다. (인프런 강의)따라하며 배우는 도커와 CI환경

[도커의 정의 및 구성 요소]

도커란?

컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫폼 및 생태계

컨테이너란?

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

  • 일반적인 컨테이너: 물건을 담는 장소 및 운송 수단

  • 서버에서의 컨테이너: 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.

컨테이너 이미지

코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 스포트웨어 패키지

컨테이너

이미지의 인스턴스이며 프로그램을 실행한다.

도커를 쓰는 이유

도커 없이 프로그램을 받는 다면 종속성으로 인해 예상치 못한 에러가 발생할 수 있다. 하지만 도커를 이용한다면 동일한 환경을 구성하기 용이하기 때문에 에러가 덜 발생하고 설치 과정이 간단해 진다.


[도커의 흐름]

docker run hello-world

img

  1. 도커 CLI에 커맨드를 입력한다.

  2. 도커 서버가 그 커맨드를 받아서 작업을 하게 된다.


[도커와 기존 가상화 기술과의 차이]

img

  • 가상화 기술이 나오기 전: 하나의 서버를 하나의 용도로만 사용. 인정적이지만 비효율적

  • 하이퍼 바이저 기반 가상화 출현: 논리적으로 공간을 분할하여 VM이라는 독립적인 가상환경의 서버 이용 가능. 하이퍼바이저는 호스트 OS에서 다수의 게스트 OS를 구동할 수 있게 해주는 소프트웨어이다.

  • 컨테이너: 컨테이너는 하이퍼 바이저와 달리 게스트 OS가 필요하지 않으므로 더 가볍다.

도커, VM의 공통점: 기본 하드웨어에서 격리된 환경 내에 애플리케이션 배치

차이점: 환경이 격리되느 정도

  • 도커 컨체이너는 같은 호스트의 다른 컨테이너와 동일한 커널을 공유. 전체 OS를 내장할 필요가 없으므로 매우 가볍다.

  • 가상 머신은 VM만을 위한 커널을 부팅하고 운영체제 프로세스를 탑재한다. 따라서 무겁고 느리다.


도커 컨테이너 격리 방법

리눅스에서 쓰이는 Cgroup, 네임스페이스를 이용함

  • C Group: CPU, 메모리, network bandwith, hd i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리. 특정 사용량이 많다면 제한 가능

  • 네임스페이스: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술

윈도우/맥에서 도커를 실행할 때, 리눅스 VM, 리눅스 커널을 얹어 C Group 및 네임스페이스 사용이 가능하다.


© 2020. All rights reserved.