컨테이너 (Containers)

개념

컨테이너(container)는 컴퓨터 운영 체제를 통해 관리되며 리소스 및 기능에 제약을 가지는 구동 프로세스(running process)이다. 컨테이너 프로세스에서 사용할 수 있는 파일은 컨테이너 이미지로 패키징된다. 동일한 머신(machine)에서 컨테이너들은 서로 인접한 형태로 실행되지만, 일반적으로 운영 체제는 개별 컨테이너 프로세스들이 서로 상호 작용하는 것을 방지한다.

다루는 문제

컨테이너를 사용하기 전에는, 각 애플리케이션을 실행하기 위한 개별 머신이 필요했다. 이 경우 각 머신은 자체 운영 체제(CPU, 메모리 및 디스크 공간을 차지)가 필요하고, 주로 대부분의 자원들이 개별 애플리케이션을 구동하기 위해 사용된다. 또한 운영 체제에 대한 유지 관리, 업그레이드 및 구동(startup)은 또 다른 노역의 원인(source of toil)이 될 수 있다.

문제 해결 방식

컨테이너들은 동일한 운영 체제와 머신의 리소스를 공유하여 운영 체제의 리소스 부하(overhead)를 분산시키고 물리 머신을 효율적으로 사용할 수 있게 한다. 이 특징은 컨테이너간의 상호 작용이 일반적으로 제한되어 있기 때문에 가능하다. 이를 통해 동일한 물리 머신에서 더 많은 애플리케이션들을 실행할 수 있다.

그러나 여기에는 한계도 존재한다. 컨테이너들이 동일한 운영 체제를 공유하므로, 다른 대안들에 비해 프로세스는 덜 안전해 보일 수 있다는 점이다. 또한 컨테이너에는 공유 리소스에 대한 제한도 필요하다. 리소스를 보장하기 위해 관리자는 메모리와 CPU 사용을 제약(constrain) 및 제한(limit)하여 다른 애플리케이션들의 성능이 저하되지 않도록 해야 한다.