도커는 애플리케이션을 개발하고, 전달하고, 실행하기 위한 오픈소스 플랫폼이다. 

 

기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성하는 방식이었다. 해당 방식은 완벽한 운영 체제를 생성할 수 있다는 장점은 있지만, 일반 호스트에 비해 성능 손실이 있고 이미지의 크기가 커서 배포하기 부담스럽다는 단점을 가지고 있다.

  • 성능 손실은, 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업이 하이퍼바이저를 반드시 거쳐야 하기 때문에 발생한다.
  • 큰 이미지 크기는, 게스트 운영체제를 사용하기 위한 라이브러리와 커널 등을 모두 포함하기 때문이다.

 

이에 비해 도커 컨테이너는 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르고, 성능 손실이 거의 없다는 장점이 있다.

  • 리눅스 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
  • 컨테이너는 호스트의 커널을 공유해 사용하고, 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 이미지 의의 용량이 대폭 줄어들었다.

 

이러한 컨테이너 기술을 사용함으로써 애플리케이션의 개발과 배포가 편리해지고, 여러 애플리케이션의 독립성과 확장성이 높일 수 있다.

  • 개발할 때 사용하던 환경을 다른 서버에서의 컨테이너에서 똑같이 복제가 가능하기 때문에, 그저 개발하고 이미지로 만들어 운영 환경으로 전달하기만 하면 된다.
  • 오늘날 대규모 서비스에서는 확장성과 유연성을 위해 마이크로서비스 구조를 많이 사용한다. 가령 데이터베이스에 데이터를 적재하는 모듈과 적재된 데이터를 가공하는 모듈을 서로 다른 컨테이너로 분리했다고 가정해보자. 이러면 모듈 간의 이미지 버전을 따로 가져갈 수 있어서 유지 보수가 용이해지고, 특정 모듈의 컨테이너 수만을 늘려 부하를 분산할 수도 있다.

 

참고 링크

'인프라 > 도커' 카테고리의 다른 글

docker /var/run/docker.sock 심볼릭 링크 문제  (0) 2023.06.11
Dockerfile  (0) 2023.06.11
볼륨  (0) 2023.06.11
도커 엔진과 구조  (1) 2023.06.11

+ Recent posts