도커(Docker) 란?

busybean3·2021년 9월 7일
0

도커

목록 보기
1/4

도커(docker)는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로잭트입니다. 기존에 쓰이던 가상화 방법인 가상 머신과 달리 도커 컨테이너 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로서 많은 개발자들에게 주목받고 있습니다.

👉 가상 머신과 도커 컨테이너

기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식입니다.

하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제라고 하며, 각 게스트 운영체제는 다른 게스트 운영체제와 완전히 독립적인 공간과 시스템 자원을 할당받습니다.

하이퍼바이저는 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼(platform)을 말한다. 가상화 머신 모니터 또는 가상화 머신 매니저(영어: virtual machine monitor 또는 virtual machine manager, 줄여서 VMM)라고도 부른다. [1]

위 그림은 가상머신에서 보는 것과 같이 각족 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생합니다. 또한 가상 머신을 배포하기 위해서 이미지로 변환 할때 라이브러리, 커널 등을 포함하기 때문에 크기가 커집니다. *결론적으로 가상 머신은 배포하기에 성능이 저하되는 점과 이미지의 크기가 매우 커질 수 있기 때문에 적절하지 않습니다.

그에 반면 도커 컨테이너의 경우 가상화된 공간을 생성하기 위해서 리눅스의 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없습니다. 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에 애플리케이션을 구동하는 데 필요로 하는 라이브러리 및 실행 파일만 존재하기 때문에 이미지의 크기 또한 대폭 줄어들 수 있습니다. 결론적으로 가상 머신에 비해서 성능의 손실이 거의 없으며, 필요한 커널은 공유해 사용하고, 애플리케이션을 구동하는데 필요로 하는 라이브러리 및 실행 파일만 존재하여 이미지의 크기를 대폭 줄일 수 있다는 장점이 존재합니다.

이제 자세한 도커의 장점을 살펴보도록 하자.

👉 도커의 장점

1. 개발과 배포의 편의성

도커 컨테이너는 호스트 OS 위에서 실행되는 독립된 공간입니다. 따라서 컨테이너 내부에서 설정파일을 수정해도 호스트 OS에는 영향을 끼치지 않습니다. 또한 배포하기 위해서는 해당 컨테이너를 도커 이미지라고 하는 일종의 패키지로 만들어 운영 서버에 전달히기만 하면 됩니다. 그렇게 되면 각종 라이브러리 설치 등으로 인한 의존성에 자유로울 수 있습니다. 게다가 커널을 포함하지 않는다는 점에서 이미지의 크기가 그다지 크지 않습니다.

2. 독립성과 확장성

이 개념을 이해하기 위해서는 모놀리스(Monolith) 구조와 마이크로 서비스(Micro-service) 구조를 알아야합니다.

모놀리스 구조 : 상호 작용하는 로직을 하나의 프로개름 내에서 구동시키는 방식
마이크로 서비스 구조 : 여러 모듈을 독립된 형태로 구성하여 구동시키는 방식

해당 그림과 같이 마이크로 서비스 구조는 각 모듈을 독립된 형태로 구성하기 때문에 종속되지 않고 변화에 빠르게 대응할 수 있으며, 각 모듈의 관리가 쉬워진다는 장점이 있습니다. 예를 들면 웹서비스는 데이터베이스 컨테이너와 웹 서버 컨테이너로 분리 할 수 있고, 웹 서비스에 부하가 발생할 시 마이크로 서비스 구조의 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산 할 수 있습니다.

이와 같은 컨테이너 기반의 마이크로 서비스는 개발자가 그 구조를 직접 구현하기 보다는 도커 스윔 모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 사용하는 것이 일반적입니다.



오늘은 도커의 기본적인 개념을 알아보았습니다.

다음 포스팅은 도커의 이미지, 컨테이너, 볼륨을 알아보도록 합시다.

REFERENCE

해당 글의 모든 레퍼런스는 "시작하세요! 도커/쿠버네티스 친절한 설명으로 쉽게 이해하는 컨테이너 관리" (용찬호 지음) 을 알립니다.

https://coupa.ng/b2DsNQ

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
[1]. https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%ED%8D%BC%EB%B0%94%EC%9D%B4%EC%A0%80
[2]. https://www.redhat.com/ko/topics/microservices/what-are-microservices

profile
엉덩이 무거운 개발자가 되기 위해서 몸무게를 찌웠다...

0개의 댓글