컨테이너(Container) 를 알아볼 때 가장 먼저 가상머신(Virtual Machine)과 비교를 하게 됩니다.
일반적인 가상 머신은 Host OS에 하이퍼바이저를 설치하고, 그 위에 Guest OS를 동작시키는 형태로 동작합니다. 반면 컨테이너는 Host OS에 컨테이너 런타임을 올리고, 그 위에 프로세스로서 컨테이너를 동작시킵니다.
가상 머신은 단일 시스템에 여러 OS가 동시에 실행되는 반면, 컨테이너는 동일한 OS 커널을 공유하며 프로세스를 격리합니다. 컨테이너는 단순한 프로세스이므로 가상 머신에 비해 매우 가볍고 빠르게 동작할 수 있습니다.
즉, 컨테이너(Container)는 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미합니다.
도커(Docker) 는 컨테이너를 동작시키기 위한 엔진 중 하나입니다. 컨테이너 자체는 새로운 기술이 아니었지만, 도커는 단기간에 많은 개발자의 지지를 얻습니다. 여기에는 크게 두 가지 이유가 있습니다.
우선 컨테이너 관리 방식입니다. 도커에서는 Dockerfile이라는 정의 파일을 작성하여 동일한 컨테이너 이미지를 간단하게 만들 수 있습니다. 즉 IaC(Infra as Code) 구현에 있어 효과적인 소프트웨어입니다. 또한 컨테이너 이미지에는 실행 환경 설정과 애플리케이션이 포함되어 있기 때문에 도커 엔진만 설치되어 있다면 애플리케이션의 동작이 보장됩니다.
두 번째 이유는 컨테이너 이미지를 저장, 공유하기 위한 생태계가 마련되어 있다는 점입니다. 생성된 컨테이너 이미지는 각 환경에 확실하게 배포할 수 있어야 의미가 있습니다. 도커는 도커 허브라고 하는 컨테이너 이미지 저장 및 공유를 위한 저장소(Repository)가 제공됩니다. 깃허브와 같이 docker push/pull 명령을 통해 간단히 도커 허브에 컨테이너 이미지를 전송하고 다운받을 수 있습니다.
댓글