Docker란 무엇일까 ?
인프라를 어플리케이션을 관리하는 것처럼 관리하고, 신속하고 코드를 배포에 용의하게 만들어주는 오픈 플랫폼입니다.
흔히 컨테이너 기반 가상화 도구라고도 불리며 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술이라 볼 수 있습니다.
꼬리물기로, 하나씩 차근차근 알아보려고 합니다.
도커를 알았으니 이제 컨테이너가 뭔지 의문이 들 수 있습니다.
여기서 컨테이너란, 가상화 기술 중 하나로 호스트 운영체제 위에 여러 개의 격리된 환경을 생성하고 각각의 컨테이너 안에서 애플리케이션을 실행하는 소프트웨어 패키지 입니다.
그럼 또 여기서 가상화 기술이 정확한 개념에 대해 모르시는 분들이 있을 것이라 생각합니다.
여기서 말하는 가상화 기술이란, 하나의 물리적 컴퓨터 자원(CPU, 메모리, 저장장치 등)을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술을 말합니다. 이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있고, 서버나 애플리케이션을 운영하는데 있어 유연성과 안정성을 제공합니다.
즉, 가상화 기술은 OS위에 하이퍼바이저를 활성화 시켜, 그위에 컴퓨터 자원을 분산하는 기술이라고 보면 될 것 같습니다.
여기서 하이퍼바이저는 Vmware나 VirtualBox같은 가상머신 소프트웨어를 말합니다.
Docker vs VM
VM 가상화 기술을 활용하여 도커처럼 여러개의 가상 컴퓨터환경을 만들어내는데, 그러면 똑같은 기술 아닌가?라는 생각이 들 수 있습니다. 하지만 둘에게는 명확한 차이가 있습니다. 바로 Guest OS의 유무입니다.
Docker 컨테이너의 경우 VM과 달리 Guest OS가 필요하지 않기 때문에 매우 가볍다는 장점이 있습니다.
그리고 애플리케이션을 가동할 때, 실행 이미지를 Host OS에 배포하면 되는데, VM의 경우 VM을 띄우고 하드웨어를 할당한 다음 Guest OS를 부팅하여 실행하기 때문에, 매우 복잡하다는 차이가 있습니다.
하이퍼바이저 대신 컨테이너 엔진을 띄우고 바로 컨테이너를 실행하여 더 경량화 된 모습을 볼 수 있습니다.
도커 아키텍처
Docker Daemon
도커는 run, build, pull을 통해 docker hub에서 이미지를 가져오거나 이미지를 실행 및 생성하게 되는데, 이를 관리해주는 곳이 도커 데몬입니다.
도커 데몬은 도커 엔진의 핵심 구성 요소로, 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행합니다.
Docker Client
도커 클라이언트는 도커와 상호 작용하는 우리와 가장 밀접하게 존재하는 곳이고, 명령어를 통해 도커 데몬으로 보내어 실행하게 됩니다.
Docker Registry
도커 레지스트리는 도커 이미지를 관리하고 저장하는 곳으로, 누구나 접근 가능한 공개형 저장소인 dockerhub가 존재합니다. 공식적인 이미지가 보관되어 있는 곳이기도 하고, 본인이 작성한 코드를 이미지화 시켜 보관할 수도 가져올 수도 있는 장소입니다.
도커의 작업 과정은 흔히 앱스토어를 생각하면 좋을 것 같습니다.
앱스토어에 다양한 애플리케이션이 존재하고 앱스토어에서 애플리케이션을 설치해 실행하면 프로세스가 되는 것처럼, 도커 또한 도커허브에서 이미지를 받아오고 받아온 이미지를 실행하는 환경으로, 앱스토어와 유사하다고 볼 수 있습니다.