도커 이전에 VM이 존재했다.
13년에 출시한 도커를 사용하기 이전에는 무엇을 사용했을까?
가상머신(Virtual Machine)을 활용하여 서버 프로그램을 구축하였음.
대표적인 가상머신으로는 VMware가 있음.
그렇다면 VM은 또 뭔데?
우선 가상머신의 개념적 정의
하나의 물리적 시스템에서 각각 자체 운영 체제(OS)와 애플리케이션을 지닌 다수의 가상 머신을 만들 수 있게 해주는 것. ( 즉 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터)
VM을 사용하는 이유는?
VM을 사용하는 주요 이유는 서버 통합 때문
💡 서버 통합? 처리 용량이 충분한 서버가 있으면 서버 통합을 사용하도록 서버를 여러 개의 작은 개별 시스템으로 논리적으로 세분화할 수 있습니다. 서버 통합을 위한 파티션을 사용하면 애플리케이션을 격리할 수 있으며, 설치 공간이 감소되고, 단일 지점에서 관리하며 워크로드가 변경됨에 따라 더 쉽게 자원을 재분배하는 추가 이점이 있음.
대부분의 운영 체제와 애플리케이션 배포는 HyperVisor에 배포되는 경우 소량의 가용 물리적 리소스만을 사용
서버를 가상화하면 각 물리 서버에 수많은 가상 서버를 배치하여 하드웨어 활용률을 개선할 수 있음.
정리해보자면,
여러 개의 OS를 가진 프로그램을 돌리려면 여러 대의 하드웨어 서버가 필요한데 이는 리소스가 굉장히 커진다는 것을 의미..
>> 이를 해결하기 위해 VM이라는 소프트웨어를 활용하여 하나의 하드웨어 위에 여러 개의 소프트웨어 프로그램(OS + Program)을 돌릴 수 있도록 하여 리소스를 줄이기 위해 사용.
그럼 이제 VM 을 활용하는 이유는 알겠으니
VM과 도커는 어떻게 다른데?
VM의 구조
VM : 분할 공간에서의 가상환경, Virtual Machine
호스트 시스템 : 서버의 OS
게스트 OS : VM 의 OS
하이퍼바이저 : 게스트OS를 구동 및 모니터링
가장 큰 차이점은 Guest OS의 유무 >> 자원의 효율성
VM의 경우 컨테이너마다 Guest OS에 대한 자원을 소비해야 하지만
Docker의 경우 OS를 위한 자원을 소비하지 않고 프로그램을 구동하는데 필요한 모든 패키지만 있으면 컨테이너 구동이 가능하기 때문에 자원 측면에서 효율적.
또한 VM의 경우 “이미지”로써 독립적인 같은 환경을 구축할 수 없는 단점이 있음.
조금 더 깊게 알고 싶다면 아래를 참조
💡 VM같은 경우에는 Hypervisor를 반드시 거쳐서 컨테이너를 생성하기 때문에 성능 손실이 발생. 뿐만 아니라 GuestOS를 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지 크기 또한 커지게 됨. (이미지의 크기가 커지게 되면 당연히 배포하기도 부담스러워짐.) 성능 손실이라는 단점이 있지만 반대로 장점으로는 완벽한 운영체제를 생성할 수 있다는 점이 있음. Docker의 경우에는 리눅스 자체 기능인 chroot, namespace, cgroup을 활용하여 프로세스 단위의 격리환경을 생성하여 성능 손실이 거의 없음. 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 프로그램 구동에 필요한 라이브러리 및 실행 파일만 존재하기 때문에 VM에 비해 이미지의 용량이 대폭 감소.
음 VM < Docker는 OK... 그래서 Docker는 뭐하는 앤데??
도커를 이곳저곳에서 많이들 사용한다니까 일단 도커를 사용해야할 것 같긴 하죠?
근데 이유는 정확하게 모르고 사용하는 건 아무래도 아닌 것 같으니 왜 사용하는지에 대해 장점으로 알아봅시다.
강력한 Docker의 장점
- 애플리케이션의 개발과 배포가 편해짐!
- 도커 컨테이너는 HostOS 위에서 실행되는 격리된 공간으로 컨테이너 자체에 특별한 권한을 주지않는 한 아무리 컨테이너를 이리 바꾸고 저리 바꿔도 HostOS에 영향을 끼치지 않음. >> 독립된 개발 환경을 보장 받는 것.
- 개발/운영 환경의 통합이 가능해짐. >> 컨테이너 내부에서 여러 작업을 마친 뒤 운영환경에 배포하려고 한다면, 해당 컨테이너를 ‘도커 이미지’라는 일종의 패키지로 만들어 운영 서버에 전달하기만 하면 됨. 다른 서버에서도 똑같이 복제할 수 있음.
- 도커 이미지는 커널을 포함하고 있지 않음.
- 여러 애플리케이션의 독립성과 확장성이 높아짐!
우선 해당 장점에 대해 설명하기 이전에 소프트웨어 아키텍쳐 패턴인 모놀리스 구조와 마이크로서비스 구조를 이해하고 있으면 도움이 됨.
두 가지의 아키텍쳐에서 MSA의 경우에는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응할 수 있음. >> 각 모듈의 관리가 쉬워짐.
MSA에서 컨테이너는 가장 많이 사용되고 있는 가상화 기술 (컨테이너의 생성은 빠르며 여러 모듈에게 독립된 환경을 제공하기 때문)
공부한 내용을 정리한 PDF파일입니다.
'DevOps. > Docker' 카테고리의 다른 글
[Docker] 도커를 이용해 Mysql 컨테이너 실행 (0) | 2024.01.09 |
---|---|
[Docker] 스프링부트 프로젝트 이미지 생성 및 컨테이너 실행 (0) | 2024.01.09 |
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!