도커 컨테이너가 대체 무엇인지 알고자 하는 본인의 삽질을 글로 써보고자 한다.
한 주 동안 공부하며 뇌피셜로 혼자 만들어낸 컨테이너의 정의는 다음과 같다.
"컨테이너는 독자적인 namespace 와 cgroup 을 가진 프로세스이다."
위의 정의가 대체 무슨 말인지 이해해보기 위해 프로세스, namespace, cgroup 에 대해서 설명을 해보고자 한다.
프로세스란 실행 가능한 상태로 머신위에 올라간 프로그램의 인스턴스이다.
(a process is the instance of a computer program)
일반적인 Personal Computer 환경에서, 프로세스는 실행 되기 위해 보통 다음의 4가지 자원을 필요로 한다.
CPU, 메모리, 디스크 스토리지, 네트워크
머신에 연결된 다른 장치들이 더 많을 수도 있겠지만, 우선 "관리"가 필요한 4가지 핵심 자원은 위의 4가지로 한정하기로 하자.
태고의 프로그래머들은 프로그램을 만들 때, 자신의 프로그램이 머신에서 실행될 때 필요한, 자원 관리까지 본인의 프로그램에 포함하여 작성했다.
그때는 그래도 괜찮았다. 머신에서 보통 한개의 프로세스만 실행되었으니 말이다.
그러나 하나의 머신에서 여러개의 프로세스를 돌리고자 하는 시도들이 이루어졌고, 각 프로세스들은 본인이 필요로 하는 자원을 머신에서 쟁취하기 위해 서로 투쟁하기 시작했다.
문제는 머신안에 있는 자원은 유한하다는 점이다.
컴퓨터의 주인님(바로 당신)이 열심히 알바를 뛰어서 벌은 돈으로 새로운 자원을 사지 않는한, 자원은 증가하지 않는다.
하지만 주인님의 욕심은 끝이 없었고, 더 많은 작업들을 더 짧은 시간내에 컴퓨터가 하기를 원했다.
별 생각이 없던 초반부는, 자원 배분을 프로세스들 간의 자유 경쟁에 맡겼다.