컨테이너란?
컨테이너란?
– 응용프로그램의 종속성과 함께 응용프로그램 자체를 캡슐화한 것
컨테이너의 등장은 소프트웨어의 개발, 배포, 실행하는 방법을 근본적으로 뒤바꾸어 버렸습니다. 도커가 등장함으로 개발자들은 프로그램이 실행 될 환경을 고려하지 않아도 되었고, 이 것은 어떤 장비에서 다른 버전의 OS에서 실행 되더라도 컨테이너 안의 프로그램은 항상 동일한 환경에서 실행될 수 있음을 의미합니다.
- 컨테이너는 호스트 OS에 있는 자원들을 공유하여, 자원을 좀 더 효율적으로 사용할 수 있게 해줍니다.
- 컨테이너는 빠르게 구동되고, 빠르게 중지 됩니다.
- 컨테이너는 호스트 OS에 직접 설치해서 운영하는 것에 비해 오버헤드가 거의 없습니다.
- 컨테이너는 운영 환경이 변함에 따라 발생하는 모든 버그들을 없앨 수 있는 이식성을 제공합니다.
- 컨테이너는 매우 가볍습니다.
- 컨테이너는 최종 사용자와 개발자가 클라우드에 배포하기 쉬우며, 사용자가 구성과 설치에서 발생하는 문제들로 시간을 허비하는 것을 없애줍니다.
컨테이너의 목적
컨테이너는 VM과 비슷해 보이지만 근본적인 목적이 다릅니다. VM이 OS환경을 에뮬레이트 하는것에 목적을 두고 있다면, 컨테이너는 응용프로그램의 이식성과 독립성에 목적을 두고 있습니다. 컨테이너가 활성화된 시기는 아직 그리 오래되지 않았기 때문에 많은 기업들이 VM위에 컨테이너를 다시 사용하는 하이브리드 방식을 많이 채택하고 있습니다. 하지만 점점 추세는 서버리스(Server-less)로 넘어가는 추세이며, 하나의 거대한 호스트 OS의 자원을 좀더 효율적으로 사용하기 위해, 하나의 호스트 OS에 여러 컨테이너를 올려 서버의 자원을 좀 더 효율적으로 쓰는 방식으로 변화 하는 추세입니다. 대표적으로 쿠버네티스가 있습니다.
컨테이너의 역사
컨테이너의 개념 자체는 오래 되었습니다. Unix 시스템에는 간단한 형태의 독립된 파일시스템을 제공하는 chroot 명령이 존재해 왔습니다. 1998년부터 FreeBSD는 chroot 샌드박싱을 프로세스로 확장하는 Jail 유일리티를 제공해 왔습니다. 2001년 즈음 Solaris Zone은 비교적 완벽한 컨테이너화 기술을 제공하였지만, Solaris에서만 사용 할 수 있었습니다. 같은 해 Parrallels Inc.는 리눅스용 사용 Virtuozzo 컨테이너 기술을 발표하였고, 이후 2005년에는 핵심 기술을 OpenVZ라는 이름으로 오픈 소스화 했습니다. 그 후 구글(Google)이 리눅스 커널을 위한 CGroups의 개발을 시작했고, 구글의 인프라를 컨테이너로 옮기는 것을 시작으로 2008년 시작된 리눅스 컨테이너(LXC) 프로젝트가 CGroups, kernel namespace, chroot 기술과 합쳐져서 완벽한 컨테이너화 솔루션을 제공하게 되었고, 2013년 Docker의 등장은 컨테이너가 IT 전반에 걸친 주류 기술로 거듭나게한 마지막 카드로 자리잡게 되었습니다.
OS 컨테이너
OS컨테이너는 가상 머신과 비슷합니다. 단 호스트머신 OS의 커널을 공유하면서 유저 스페이스 격리 기능을 제공한다는 점이 다릅니다. VM과 마찬가지로 컨테이너에 전용 리소스를 할당할 수 있고, 다양한 어플리케이션이나 라이브러리 등을 설치하고 설정하고 구동할 수 있습니다. OS 컨테이너는 확장성 테스트를 수행할때 유용합니다.
애플리케이션 컨테이너
애플리케이션 컨테이너의 구동은 OS 컨테이너가 호스트 OS위에서 여러개의 서비스를 구동하는 방법과 다릅니다. 애플리케이션 컨테이너는 하나의 서비스를 패키지로 만들어서 구동합니다. Docker와 Rocket이 등장하면서 애플리케이션 컨테이너는 굉장히 매력적인 배포 방식으로 주목받기 시작했습니다. 애플리케이션 컨테이너는 애플리케이션의 구동에 관련된 프로세스만 구동합니다. MySQL 컨테이너를 들어가서 ps 명령으로 확인 해보면 mysqld 프로세스만 떠 있습니다. 도커 컨테이너는 Layer방식을 사용하는데, 이를 통해 중복된 부분을 최소화 화고 재사용성을 높일수 있습니다. 베이스 이미지에 대한 컨테이너를 먼저 구동하고, 그 위에 원하는 요소를 파일시스템에 별로의 레이어로 추가하는 방식으로 구성됩니다. 도커파일에 명시된 run 명령이 실행될 때마다 컨테이너에 새로운 레이어가 생성 됩니다. 우리가 흔히 사용하는 Docker 컨테이너는 대부분 애플리케이션 컨테이너 입니다.
최신 댓글