검색
색인
컨테이너, container

가상화운영체제 위에서 애플리케이션의 독립적인 실행에 필요한 파일(소스코드, 라이브러리 등)을 모은 패키지.
인프라나 운영체제에 상관없이 컨테이너 런타임(container runtime)에서 동일하게 동작하기 때문에 테스트나 배포가 쉽다.
* 컨테이너 런타임(container runtime): 컨테이너 애플리케이션을 실행하고 관리하는 소프트웨어

컨테이너는 1979년에 Unix V7의 파일 접근을 제한하는 명령어인 chroot(change root directory)에서 시작하였다. FreeBSD Jail, 리눅스 컨테이너스(LXC: LinuX Containers), 도커(docker) 등 오픈소스 소프트웨어들을 거치면서 컨테이너 애플리케이션들은 하나의 커널(kernel)을 공유하면서 프로세스, 파일 시스템, 네트워크 등 시스템 자원들이 각자 격리되어 동작하도록 발전하였다.
대표적인 컨테이너 오픈소스 소프트웨어로 도커(docker), CRI-O, containerd가 있다. 특정 업체에 종속되지 않고 구동 호환성을 보장하기 위해 리눅스 재단 산하 OCI(Open Container Initiative) 커뮤니티에서 컨테이너 표준을 제정한다.

컨테이너는 가상 컴퓨터(VM: Virtual Machine)와 비교하여 시동 시간이 짧고, 메모리 사용이 적다. 즉, 보통의 경우 컨테이너에는 운영체제가 포함되지 않기 때문에 파일 크기가 수십 MB 정도로 작지만 가상 컴퓨터는 운영체제가 포함되므로 수 GB 정도로 크다.
또한 컨테이너는 애플리케이션을 지속적으로 통합하고 제공(배포)(CI/CD: Continuous Integration/Continuous Delivery(Deployment))하기에 유용하다. 개발자가 컨테이너 애플리케이션의 변경 사항을 컨테이너 이미지로 만들어 이미지 저장소(배포 서버)에 업로드하면 단말, 클라우드 서버 등 어디에서나 운영체제 - Windows, Linux, Mac 등 – 에 상관없이 컨테이너 애플리케이션을 동일하게 실행할 수 있다. 쿠버네티스와 같은 클라우드 오케스트레이션 소프트웨어는 서비스가 중단되지 않고 운영될 수 있게 도와준다. 그러나 다수의 컨테이너 애플리케이션이 하나의 커널을 공유하기 때문에 애플리케이션별로 커널을 사용하는 가상 컴퓨터 기술 대비 보안에 취약한 단점이 있다.
컨테이너는 영상 스트리밍, 게임, 웹 서비스 등의 클라우드 서비스 분야에서 활용할 수 있다.

* FreeBSD jail: FreeBSD 운영체제의 자원(파일, 네트워크 등)이 가상화되어 프로세스마다 격리되어 실행되는 환경
* 컨테이너 이미지(container image): 컨테이너 애플리케이션 실행에 필요한 파일과 설정을 저장한 파일
* kernel: 운영체제에서 핵심이 되는 소프트웨어로 시스템이 원활히 돌아갈 수 있도록 메모리, 프로세서 등의 자원을 제어하고 관리함