본문 바로가기

Cloud

도커(Docker)란?

도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 어플리케이션을 컨테이너로서 좀 더 쉽게 사요할 수 있도록

만들어진 오픈소스 프로젝트입니다.

가상 머신과는 다르게 성능 손실이 거의 없기 때문에 차세대 클라우드 인프라 솔루션으로도 각광받고 있습니다.

 

 

도커라는 컨테이너 안에서 여러 프로젝트가 돌아가는 것이기 때문에 도커의 성능, 즉 엔진이 중요합니다.

기존 가상머신과 도커를 비교해보면 더 이해가 쉬울 것 같습니다.

 

 


가상머신(Virtual box, VMware) 도커
여러 운영체제 -> 가상머신 단위로 구별
예: OS(Ubuntu) -> 가상머신 1개 / OS(Centos) -> 가상머신 1개
하이퍼바이저에 의해 생성되고 관리되는 게스트 운영체제
가상화 공간 생성을 위해 리눅스 자체 기능인 chroot, namespace, cgroup 등을 활용 -> 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
각종 시스템 자원을 가상화하고 독립된 공간을 생성할 때,
하이퍼바이저를 거치기 때문에 일반 호스트보다 성능 손실이 발생
컨테이너에 필요한 커널은 호스트 커널과 공유해 사용하고, 컨테이너 내부의 어플리케이션을 구동할 라이브러리 및 실행파일만 존재하도록 함
-> 이미지로 만들어 배포할 때 용량이 기존 가상머신보다 훨씬 줄어드는 효과
게스트 운영체제 사용 목적이기에 라이브러리, 커널 등이 생성되어 이미지 크기가 방대해짐 (단, 그만큼 완벽한 운영체제를 생성할 수 있음) 속도가 빠르고 성능 손실이 거의 없다
엄청난 용량의 가상 머신 이미지를 어플리케이션으로 배포하기엔 부담이 큼  
   
   
   

* 하이퍼바이저: 가상 머신 모니터라고도 하는하이퍼바이저는 가상 머신(VM)을 생성하고 실행하는 프로세스

메모리 및 처리와 같은 단일 호스트 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상 머신을 지원할 수 있도록 합니다.


 

 

Why Docker?

 

1) 어플리케이션 개발과 배포가 편해진다.

서버 부팅할 때 운영체제: 호스트OS가 수행됩니다.

호스트OS 위에서 도커 컨테이너가 존재하며, 호스트OS와는 격리된 공간으로 개별적으로 만들어집니다.

격리된 독립적인 공간이기에, 컨테이너에 특별한 권한을 주지 않는다면 호스트OS에 영향을 주지 않습니다.

 

 

컨테이너 작업을 마친 다음에 운영 환경에 배포하기 위해서는 '도커 이미지'라는 일종의 패키지를 만들어

운영 서버에 전달하는 것입니다. 

컨테이너에서 사용되던 운영 서버에서 새롭게 패키지를 설치할 필요도 없고 그에 따른 의존성 또한

고민할 필요도 없습니다.

개발 환경에서 구현했던 환경 자체를 다른 서버에서도 컨테이너로서 똑같이 복제가 가능하기 때문에 

개발/운영 환경 통합이 간편합니다.

 

 

또한 도커는 가상 머신과 달리 커널을 포함하고 있지 않기 때문에 이미지 크기가 크지 않습니다.

이미지 단위는 레이어 단위로 구성하며, 중복되는 레이어는 재사용이 가능하므로 어플리케이션 배포 속도 또한

매우 빨라지는 장점이 있습니다.

 


 

2) 어플리케이션의 독립성과 확장성이 높아집니다.

모놀리스(Monolith) 어플리케이션: SW 여러 모듈이 상호 작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식

> 대규모 서비스, 기능이 복잡해지는 서비스에서는 확장성과 유연성이 떨어진다는 단점이 있음

> 대체: 마이크로 서비스

 

 

마이크로 서비스는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응이 가능합니다.

따라서 모듈 관리가 쉬워지며 컨테이너의 생성 및 시작이 엄청 빠르며, 여러 모듈에게 독립된 환경을 동시에 제공할 수 있기 때문에 많이 사용하는 가상화 기술입니다.

 

 

데이터베이스 컨테이너와 웹 서버 컨테이너를 분리하여 사용할 수 있고 웹 서버 컨테이너를 동적으로 늘려서

부하를 분산시킬 수도 있습니다.

각 컨테이너마다 독립적인 이미지로 관리하기 때문에 각 이미지 버전에 따라 유지보수도 각각 하여 용이하게

관리할 수 있습니다.

 

 

컨테이너 기반의 마이크로 서비스는 구조를 직접 구현한다기 보다는 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 활용해서 사용, 관리하는 것이 일반적입니다.

 

 

 

 

 

다음에는 직접 도커 엔진을 설치하고 이미지, 컨테이너 등 작업하는 내용을 포스팅하도록 하겠습니다. 

반응형

'Cloud' 카테고리의 다른 글

AWS - CLI & 사용자 정보 보호  (0) 2023.01.17
About IAM  (0) 2023.01.17
AWS 소개  (0) 2023.01.17
Docker 환경 구성2  (0) 2023.01.17
Docker 설치방법 & 환경구성  (0) 2023.01.17