‘도커(docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.’
→ 그렇다면, 여기서 컨테이너는 무엇일까요? 도커를 알기전에 컨테이너의 개념을 파악했습니다.
선박 컨테이너? 왜 사용할까?
‘규격화’, ‘운반의 용이성’, ‘다양한 물건 탑재 가능’
가상화란?
가상머신(VM)이란?
그렇다면, 컨테이너와 가상머신은 같은 개념일까요?
- 컨테이너와 가상머신은 공통적으로,
- 애플리케이션을 관련 라이브러리 및 모든 종속항목과 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리환경을 마련해줍니다.
- 여기서 패키지는 APP 에 필요한 모든 파일, 설치파일, 필요한 모든 것을 의미
→ 하지만, 가상화 방식이 다름- 기존의 VM 생성 방식 → OS 가상화 → Host OS 위에 Guest OS 전체를 가상화하는 방식
- 그러므로 OS가 가상머신 이미지에 포함되어야만 하고, 이는 용량이 매우 큰 문제
- 컨테이너 → 별도의 하드웨어 에물레이션 없이 → 리눅스 커널 공유 → 컨테이너 실행
- Guest OS가 존재하지 않음
- 운영체제 수준의 가상화
별도의 하드웨어 애뮬레이션 없이 리눅스 커널을 공유하여 컨테이너를 실행하며 Guest OS가 존재하지 않는 ‘운영체제 수준의 가상화’
→ 이것이 가능한 이유는? 리눅스 컨테이너를 통해 ‘프로세스를 격리’ 하는 것이 가능하기 때문입니다.
“즉, 각각의 프로세스가 독립한 공간에서 할당받은 자원을 이용하여 동작하도록 만들 수 있음”
→ 리눅스에서 제공하는 다음과 같은 기술의 제공으로 인해…
리눅스 네임스페이스(NameSpace)
리눅스 컨트롤 그룹(cgroups)
기존 가상화 기술에서는 VM이 실제 물리 하드웨어를 에뮬레이트 → OS 반드시 필요
- 하지만, 리눅스 컨테이너(LXC)에서는 모든 프로세스가 호스트 OS에서 바로 시작
- 일반적인 프로세스와 다른 점은 그룹화를 통해 단절된 공간에서 동작한다는 것
- 리눅스 컨테이너 기술은 도커 컨테이너가 사용하는 기술의 근간이 됨
컨테이너 : 리눅스 환경에서 돌아가는 일종의 프로세스
(리눅스가 제공하는 기능을 이용, 단절된 공간에서, 할당받은 시스템 자원을 통해, 독립적으로 가동)