컨테이너 기술과 Docker
가상화 기술
호스트형 서버 가상화
- 하드웨어 상에 베이스가 되는 호스트 OS를 설치
- 호스트 OS에 가상화 소프트웨어 설치 후, 가상화 소프트웨어 상에서 게스트 OS를 작동시키는 기술
- 호스트 OS 상에서 다른 게스트 OS를 움직이기 때문에 오버헤드가 큼 <---> 컨테이너는 오버헤드 작음
- VirtualBox, VMware 등
하이퍼바이저형 가상화
- 가상화를 전문으로 수행하는 소프트웨어인 하이퍼바이저를 배치한 것, 하드웨어와 가상환경을 제어
- 호스트 OS 없이 하드웨어를 직적 제어하기 때문에 자원을 효율적으로 사용 가능
- 가상 환경마다 별도의 OS가 작동하므로 가상 환경의 시작에 걸리는 오버헤드가 커짐
- 하이퍼바이저형은 보통 펌웨어로서 구축
컨테이너
호스트 OS상에 논리적인 구획(컨테이너)를 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리, 애플리케이션 등을 하나로 모아, 별도의 서버인 것처럼 사용할 수 있게 만든 것
- 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 컨테이너가 공유하여 사용
- 오버헤드가 적기 때문에 가볍고 고속으로 작동
- OS나 디렉토리, IP 주소 등과 같은 시스템 자원을 마치 각 애플리케이션이 점유하고 있는것처럼 보이게 함
- 애플리케이션의 실행에 필요한 모든 모듈(파일 및 디렉토리)을 컨테이너로 모을 수 있기 때문에 여러 컨테이너를 조합해 하나의 애플리케이션을 구축하는 마이크로 서비스형 애플리케이션과 친화성이 높음
Docker
Dcoker의 개요
- 컨테이너 기술을 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼
- 애플리케이션 실행에 필요한 것을 하나로 모아, 이미지로 관리함으로서 이식성을 높임
- 이식성이 높기 때문에 클라우드 시스템과의 친화력도 높음
- Docker는 내부에서 컨테이너 기술을 사용하고 있음
Docker의 작동
Docker 기술은 Linux 커널과 함께 Cgroups 및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 이러한 독립성은 컨테이너의 본래 목적이다. 다시 말해, 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 떄와 동일한 보안을 유지할 수 있다.
Docker 컨테이너의 이점
- 모듈성
- Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어있다.
- 사용자는 마이크로서비스 기반 접근 방식 외에도 SOA(service-oriented architecture)의 작동 방식과 동일하게 멀티플 애플리케이션 사이에서 프로세스를 공유할 수 있다.
- 계층 및 이미지 버전 제어
- 각 Docker 이미지 파일은 일련의 계층으로 이루어져 있으며 이 계층들은 단일 이미지로 결합된다.
- 이미지가 변경될 때 계층이 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성된다.
- Docker는 새로운 컨테이너를 구축할 때 이러한 계층을 재사용하므로 구축이 훨씬 더 빨라진다.
- 중간 변경 사항이 이미지 사이에서 공유되므로 속도, 규모, 효율성이 더 개선된다.
- 계층화에는 버전 관리가 내재되어 있으며 새로운 변경사항이 발생할 때마다 내장 변경 로그가 기본적으로 적용되므로 컨테이너 이미지를 완전히 제어할 수 있다.
- 롤백
- 모든 이미지에는 계층이 있으며, 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 된다.
- 이 기는은 애자일(Agile) 개발 접근 방식을 지원하며 툴 관점에서 실제로 CI/CD를 수행하는 데 도움을 준다.
- 신속한 배포
- 배포 시간을 몇 초로 단축할 수 있다.
- 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있다.
- 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축된다.
Docker 그 다음은
Docker는 단일 컨테이너 관리에 적합하도록 만들어져 있다. 수백 개로 세분화된 컨테이너와 컨테이너화된 앱을 점점 더 많이 사용하게 되면 관리와 오케스트레이션이 매우 어려워질 수 있다. 결국 모든 컨테이너 전체에서 네트워킹, 보안, 텔레메트리와 같은 서비스를 제공하기 위해서는 한 걸음 물러나서 컨테이너를 그룹화해야 한다. 여기에 사용되는것이 바로 ⭐️⭐️ 쿠버네티스⭐️⭐️이다.
References