- 도커 개념 이해하기
개발을 하다보면 "도커"라는 개념을 자주 접하게 된다. 하지만 정작 모르고 사용하는 사람이 많은것 같다는 생각을 접하게 되었고 이에 내 나름대로의 정리를 해보려고 한다.
초기 컴퓨터는 운영체제라는 개념이 없었지만 여러 개발자들의 노력으로 OS(Operating System)이라는 개념이 탄생하게 되었다.
이로 인해 우리는 Linux, Windows, MacOS와 같은 편리한 OS를 접할 수 있었다. 하지만 운영 체제를 접하며 한가지 의문이 생겼다.
위 사진은 MacOS의 최상단 루트 디렉토리의 구조이다. 그렇다면 해당 데이터를 모두 동일하게 가지고 있다면? (좀 더 자세히 들어간다면 커널의 영역까지 설명해야 하니 우선 넘어가겠다.) 놀랍게도 100%는 아니지만 디렉토리 구조를 완벽하게 복제한다면 해당 OS가 돌아갈 수 있는 대부분의 조건이 충족 된다.
chroot는 change root의 약자다. 이 명령어를 이용하면 최상단 root(/)폴더를 원하는 위치로 바꿀수 있는데
위와 상황은 chroot를 통해 chroot라는 디렉토리를 최상단 root 디렉토리로 인식하도록 변경한 상황을 그린 것이다.
그렇다면 chroot로 바꾼 root 디렉토리 안에 OS가 구동되는데 필요한 모든 필수 요소가 들어있다면?
이것이 내가 이해한 "컨테이너"라는 개념의 시초이다.
컨테이너라는 개념을 처음 접해본 사람은 당황스러울 것이다. 컨테이너? 어떻게 그게 가능한거지? 사실 컨테이너 기술은 어려울 것이 없는 기술이었다.
도커의 출현 이전에도 컨테이너라는 개념은 존재하였으며 단순하게 생각한다면 최상단 루트를 하나 만들고(chroot) 하위에 원하는 파일들을 모아놓은 상태로
위 사진과 같이 하나의 독립적인 공간을 만드는 기술을 의미했다.
하지만 컨테이너를 만드는 것은 너무나 수고스러운 일이었다.
단순히 root디렉토리만 변경하면 되는것이 아니라 원하는 프로그램 또는 OS가 돌아가기 위해서 필수적인 파일들을 정확한 위치에 넣어야 해당 컨테이너가 제 기능을 발휘할 수 있기 때문이다.
드디어 도커가 등장했다. 도커는 좀 더 쉽게 만들어주는 도구라고 생각하면 이해하기 쉽다.
위에서의 문제점은 어떻게 컨테이너의 안에 수많은 파일들을 제자리에 세팅하느냐 하는 문제점을 도커는 해결해주었다.
https://hub.docker.com/
위 링크는 github처럼 도커가 가지고있는 hub의 주소이다. 이 도커 hub에는 수많은 컨테이너들이 자리잡고 있는데,
이처럼 누군가 이미 우분투, 파이썬과 같이 특정 OS, 특정 프로그램등에 필요한 필수적인 요소들을 모아놓은 컨테이너들을 올려놓았다.
따라서 우리는 도커 허브에서 컨테이너 이미지를 받아서 컨테이너화 시키면 바로 격리된 환경에서의 프로그램을 원하는 수만큼 돌릴수 있게 되었다.
여기까지가 내가 생각하는 도커에 대한 필수적인 지식이다. 다음 시간에는 도커를 좀더 자세히 파고 들고자 한다.