Docker?
리눅스 컨테이너에 여러 기능을 추가하여 애플리케이션을 컨테이너로서 쉽게 사용할 수 있도록 만들어진 오픈소스이다.
기존 솔루션인 가상 머신과 달리 도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로서 많은
사랑을 받고 있다. Go 언어(구글에서 개발한 언어)로 작성되어 있다.
가상 머신과의 차이점?
기존 가상화 기술은 하이퍼바이저를 이용해 여러 운영체제(Guest OS)를 하나의 호스트에서 생성하여
사용하는 방식이었다. 이러한 운영체제는 가상 머신이라는 단위로 구별되었고 이러한 가상 머신은 다른 가상 머신과
완전히 독립된 공간과 시스템을 할당받아 사용한다. 대표적인 가상화 툴로 Virtual Box, VMware 등이 있다.
즉, 완벽한 운영체제를 생성할 수 있다는 장점이 있다. 하지만, 이는 라이브러리, 커널 등을 전부 포함하기 때문에,
배포하기 위한 이미지로 만들었을 때 이미지의 크기가 커질 뿐더러, 생성될 때 하이퍼 바이저를 반드시 거치기 때문에
일반 호스트에 비해 성능의 손실이 발생한다.
하지만, Docker 컨테이너의 경우에는 리눅스 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의
격리 환경을 만들기 때문에 성능의 손실이 거의 없다. 컨테이너에 필요한 커널은 호스트의 커널을 공유하며,
컨테이너 내부에는 애플리케이션을 구동하는데 필요한 필수 라이브러리 및 실행 파일만 존재하기 때문에, 배포할 때
이미지의 크기도 대폭 줄어든다. 즉, 기존 가상 머신에 비해서 배포시간도 빠르고 성능 손실도 거의 없다.
Docker의 또 다른 장점
애플리케이션의 개발과 배포가 편해진다.
Host OS위에서 실행되는 격리된 공간이기 때문에 컨테이너에 특별한 권한을 주지 않는 이상 Host OS에 영향을 줄 수 없다
즉, 컨테이너 내부에서 많은 소프트웨어를 설치하고, 파일을 수정해도 Host OS에는 영향이 가지않아 완전히 독립된다.
Ex. 컨테이너 내부에서 여러 작업을 마친 뒤 이를 운영 환경에 배포할 때
해당 컨테이너를 도커 이미지라고 하는 일종의 패키지로 만들어 서버에 전달하면 된다. 컨테이너에 사용되던 패키지를
새롭게 설치할 필요도 없으며, 의존성을 걱정할 필요도 없다. 개발 당시의 환경을 다른 서버에서도 그대로 복제할 수 있기
때문에 개발/운영 환경의 통합이 가능해진다.
여러 애플리케이션의 독립성과 확장성이 높아진다.
소프트웨어에서 여러 모듈이 상호작용하는 로직을 하나의 프로그램에서 구동하는 방식을 모놀리스 방식이라고 한다.
소규모 서비스에는 적합하지만, 기능이 복잡하고 거대해질수록 유연성과 확장성이 줄어들게 된다.
(ex. 하나의 로직에 문제가 발생하면 연결된 다른 곳에서도 문제가 발생하거나, 새로운 기능을 추가하기 힘듬)
이러한 모놀리스 방식을 대체하기 위해 나온 방법이 컨테이너를 이용한 마이크로서비스 구조이다.
즉 모놀리스 방식은 하나의 애플리케이션에 A, B, C 모듈이 모두 존재하나, 마이크로서비스 구조에서는
A, A, A..... / B, B, B..../ C, C, C 이처럼 각 모듈들이 컨테이너로 나뉘어져 있는 형태이다.
하나의 A가 장애가 발생하여도 나머지 A컨테이너들이 존재하기 때문에 서비스가 중단되지 않으면서도
컨테이너는 수 초 내로 생성이 가능하기 때문에 동적으로 부하를 분산할 수 있다.
'Docker' 카테고리의 다른 글
Docker 컨테이너와 이미지 (0) | 2024.11.21 |
---|---|
Docker 설치 (0) | 2024.11.20 |
Docker volume에 대하여(익명, 네임드, 바인딩) (0) | 2023.09.01 |
도커로 컨테이너끼리 통신하는법 (0) | 2023.08.28 |
도커 Nginx 올리기 (0) | 2023.08.28 |
댓글