도커란?
도커는 컨테이너를 생성하고 관리하는 도구입니다. 소프트웨어에서의 컨테이너란 표준화된 소프트웨어 유닛을 말합니다. 여기에는 코드 패키지, 해당 코드를 실행하는데 필요한 종속성 도구가 포함됩니다. 도커는 항상 동일한 동작과 결과를 제공하는 이점이 있습니다.
도커는 실제 컨테이너와 동일한 개념입니다.
- 표준화된 컨테이너를 가지고 있다.
- 다양한 상품을 넣을 수 있다.
- 그 후에는 자체적으로 보관 및 격리, 즉 컨테이너의 상품은 다른 컨테이너의 상품과 섞이지 않는다.
- 냉장이 필요한 경우, 컨테이너에 내장할 수 있다.
컨테이너는 스탠드 얼론(stand alone)으로 동작합니다. 컨테이너를 처리할 수 있는 모든 선박이나 트럭에 실을 수 있고, 동일한 환경에서 동일한 애플리케이션을 실행할 수 있습니다. 도커는 이러한 컨테이너를 구축하기 위한 도구입니다. 도커는 결국 컨테이너의 생성 및 관리 프로세스를 단순화하는 도구입니다.
왜 도커와 컨테이너인가?
다음과 같은 이유로 도커를 사용합니다.
- 소프트웨어 개발에 적합하다.
- 매우 유용하다.
- 개발 환경과 생산환경이 종종 같지 않을 경우가 있다.
제품 생산에서 가지고 있는 것과 똑같은 개발 환경을 갖는 것은 상당한 가치가 있습니다. 이것이 도커와 컨테이너가 도움이 되는 부분입니다. 예를들어, 팀이나 회사 내의 각각의 개발환경을 생각해봅시다. 모두가 같은 환경이 아닐 수 있고, 버젼이 달라 오류 및 충돌이 날 수 있는 상황이 생길 것입니다. 이 때 도커를 사용해서 동일한 환경을 만들어줄 수 있습니다.
가상머신 vs 도커&컨테이너
가상 머신
가상머신은 도커와 비슷하다고 생각할 수 있습니다. 가상머신으로 했을 때의 장단점을 알아봅시다.
장점
- 분리된 환경을 생성할 수 있다.
- 그 안에 환경 별 구성을 가질 수 있다.
- 모든 것을 안정적으로 공유하고 재생산 가능
단점
- 가상 운영 체제를 지닌 여러 가상 머신에서 발생하는 오버헤드
- 중복, 복제 즉 낭비되는 공간이 발생
- 여러 대 있는 경우 매번 새로운 컴퓨터를 머신 내부에 설치해야 함
- 메모리, CPU, 하드 공간을 낭비
- 호스트 시스템 위에 추가 시스템이 실행되고 있기 때문에 성능이 나빠질 수 있다.
- 재생산 및 공유가 가능하더라도 원하는 모든 시스템에 그 가상 머신을 설정해야 하고 정확히 동일한 방식으로 구성해야 하기 때문에 까다로울 수 있다.
- 공유할 수 있는 Single Config 파일이 없다.
도커
도커를 사용하면 여전히 호스트 운영체제가 존재하지만 모든 컨테이너에 OS를 설치하지 않습니다. 도커는 컨테이너 에뮬레이트를 지원하는 내장 컨테이너를 활용하며, 그 위에 도커 엔진(Docker Engine)이라는 툴을 실행하고, 설치할 때 도커에 의해 모두 설정됩니다. 현재 시스템에서 실행되는 도커 엔진을 기반으로 컨테이너를 실행할 수 있습니다.
도커 엔진은 하나의 도구에 불과하며, 여기에는 가벼운 소형 도구가 설치되어 있을 뿐이며 여러개의 컨테이너로 분리할 수 있습니다. 여러개의 컨테이너에는 코드, 예를 들어 NodeJS와 같이 코드에 필요한 중요한 도구 및 런타임이 포함되어 있지만 부풀려진 운영체제, 수많은 추가 툴 또는 이와 유사한 것을 포함하지 않습니다. 컨테이너 내부에 작은 운영체제가 있을 순 있지만, 가상 머신에 설치하는 것보다 훨씬 작은 운영체제의 매우 가벼울 버젼일 뿐입니다.
설치
도커를 설치했을 때 어떤 것이 설치되는지 알아봅시다.
Docker Engine
도커 엔진은 실행하는데 필요한 Linux를 호스팅하는 가상머신이 설정되어 있습니다. 운영체제가 기본적으로 도커를 지원하지 않기 때문에 가상머신이 필요하며, 가상머신에서 컨테이너가 실행됩니다.
Docker Desktop
실제로 도커 엔진이 설치되고 작동하는지 확인하는 도구입니다. Daemon이라 불리는 프로세스를 포함합니다. 이 Daemon은 백그라운드에서 실행되며 도커가 작동하는지 확인합니다. CLI가 포함되어있으며, Docker Toolbox를 사용하여 접근할 수 있습니다. CLI는 전체 과정에서 명령을 실행하기 위해 사용할 도구이기 때문에 매우 중요한 역할을 합니다.