도커의 개념 및 가상화 원리
[들어가기 전에]
지금부터 정리할 도커 학습 정리는 인프런의 ‘따라하며 배우는 도커와 CI환경’ 강의를 정리한 것입니다. (인프런 강의)따라하며 배우는 도커와 CI환경
[도커의 정의 및 구성 요소]
도커란?
컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫폼 및 생태계
컨테이너란?
컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소트프웨어의 표준 단위
일반적인 컨테이너: 물건을 담는 장소 및 운송 수단
서버에서의 컨테이너: 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
컨테이너 이미지
코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 스포트웨어 패키지
컨테이너
이미지의 인스턴스이며 프로그램을 실행한다.
도커를 쓰는 이유
도커 없이 프로그램을 받는 다면 종속성으로 인해 예상치 못한 에러가 발생할 수 있다. 하지만 도커를 이용한다면 동일한 환경을 구성하기 용이하기 때문에 에러가 덜 발생하고 설치 과정이 간단해 진다.
[도커의 흐름]
docker run hello-world
도커 CLI에 커맨드를 입력한다.
도커 서버가 그 커맨드를 받아서 작업을 하게 된다.
[도커와 기존 가상화 기술과의 차이]
가상화 기술이 나오기 전: 하나의 서버를 하나의 용도로만 사용. 인정적이지만 비효율적
하이퍼 바이저 기반 가상화 출현: 논리적으로 공간을 분할하여 VM이라는 독립적인 가상환경의 서버 이용 가능. 하이퍼바이저는 호스트 OS에서 다수의 게스트 OS를 구동할 수 있게 해주는 소프트웨어이다.
컨테이너: 컨테이너는 하이퍼 바이저와 달리 게스트 OS가 필요하지 않으므로 더 가볍다.
도커, VM의 공통점: 기본 하드웨어에서 격리된 환경 내에 애플리케이션 배치
차이점: 환경이 격리되느 정도
도커 컨체이너는 같은 호스트의 다른 컨테이너와 동일한 커널을 공유. 전체 OS를 내장할 필요가 없으므로 매우 가볍다.
가상 머신은 VM만을 위한 커널을 부팅하고 운영체제 프로세스를 탑재한다. 따라서 무겁고 느리다.
도커 컨테이너 격리 방법
리눅스에서 쓰이는 Cgroup, 네임스페이스를 이용함
C Group: CPU, 메모리, network bandwith, hd i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리. 특정 사용량이 많다면 제한 가능
네임스페이스: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술
윈도우/맥에서 도커를 실행할 때, 리눅스 VM, 리눅스 커널을 얹어 C Group 및 네임스페이스 사용이 가능하다.