Docker란?
컨테이너 기반의 오픈소스 가상화 플랫폼.
: 컨테이너 기술을 사용하여 다양한 어플리케이션을 컨테이너 환경에서 신속하게 구축하고 테스트 및 배포할 수 있는 소프트웨어 플랫폼.
💡 MSA(Micro Service Architecture)
: MSA는 서비스간의 의존성을 없애고 기능을 쪼개는 것을 중점적으로 설계한 아키텍처.예를 들어,
은행 시스템을 하나의 통합된 프로그램으로 개발하지 않고 입/출금 서비스, 조회 서비스, 대출 서비스 등 기능별로 작게 쪼개서 MSA 형태로 되어 있다면,
이 때 새로운 대출 유형이 생겨 개발이 필요할 때 은행 시스템 전체를 수정할 필요 없이 대출 서비스의 수정만으로 작업을 경량화 할 수 있다.- 서비스 단위의 개발 가능
- 지속적인 통합과 배포(CI/CD)를 효율적으로 할 수 있다.
- 패치가 필요한 서비스만 배포하거나 Hotfix(정기 패치 이외 급하게 수정이 필요한 패치)를 빠르게 처리할 수 있다.
- 전체가 아닌 필요한 서비스에만 이중화를 할 수 있다.
- 전체적인 그림에서 서비스간 결합도(Coupling)를 줄이고 응집도(Cohesion)를 높이는 효과를 볼 수 있다.
단, 서비스들을 관리하기 복잡하다는 단점이 있다. 이를 Docker로 해결이 가능하다.
컨테이너(Container)
컨테이너란 어플리케이션이 동작하기 위해서 필요한 요소(실행 파일, 어플리케이션 엔진등) 을 패키지화하고 격리 하는 기술을 의미한다.
가상화 vs 컨테이너 차이
가상화 VM
- 가상화 VM은 Host OS위에 Hypervisor(가상화 소프트웨어, VMWare,KVM,Xen 등)가 설치된 위에 Virtual Machine이 만들어지는 구조이다.
- Virtual Machine은 일종의 하드웨어를 가상화 한것으로 VM 위에 다양한 종류의 Linux나 Window등의 OS를 설치하는 구조이다.
- 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다.
컨테이너 Container
- 컨테이너 Container는 가상화와 컨셉은 비슷하지만 약간을 다르다.
- VM 처럼 Host OS 위에 Docker Engine 설치되어 수행하는데, VM 처럼 하드웨어를 가상화 한 것이 아니라 Cgroup 와 namespace 와 같은 커널 기반의 기술을 이용해서 GuestOS가 없고 하나의 OS에 프로세스를 완벽하게 격리하여 분리된 환경에서 실행하도록 한다.
- Cgroup : Control Group. 시스템의 CPU 시간, 시스템 메모리, 네트워크 대역폭과 같은 자원을 제한하고 격리 할 수 있는 커널 기능
- namespace : 시스템 리소스를 프로세스의 전용 자원처럼 보이게 하고, 다른 프로세스와 격리시키는 기능
Docker를 사용하는 이유
- 뛰어난 이식성: LXC 컨테이너가 종종 시스템 특정 구성을 참조하는 반면, Docker 컨테이너는 데스크탑, 데이터 센터 및 클라우드 환경에서 수정 없이 실행됩니다.
- 쉽게 Scale Out을 할 수 있는 유연성 : LXC를 사용하면 다수의 프로세스를 단일 컨테이너 내에서 결합할 수 있습니다. Docker 컨테이너를 사용하면, 각 컨테이너에서 독립적으로 오직 하나의 프로세스만 실행할 수 있습니다. 이를 통해 업데이트나 수리를 위해 해당 파트 중 하나를 중지하는 동안에도 계속 실행될 수 있는 애플리케이션을 빌드할 수 있습니다.
- 자동화된 컨테이너 작성: Docker는 애플리케이션 소스 코드를 기반으로 컨테이너를 자동으로 빌드할 수 있습니다.
- 컨테이너 버전화: Docker는 컨테이너 이미지의 버전을 추적하고, 이전 버전으로 롤백하며, 버전을 빌드한 사용자와 빌드 방법을 추적할 수 있습니다. 심지어 이는 기존 버전과 새 버전 사이의 델타만 업로드할 수도 있습니다.
- 컨테이너 재사용: 특히 새 컨테이너를 빌드하기 위한 템플릿처럼, 기존 컨테이너는 기본 이미지로 사용될 수 있습니다. 이미지를 통해서 동ㅇ리한 환경을 가진 컨테이너를 쉽게 생성하고 관리 할 수 있다.
- 공유 컨테이너 라이브러리: 개발자는 수천 개의 사용자가 기여한 컨테이너를 포함하는 오픈 소스 레지스트리에 액세스할 수 있습니다.
Docker 이미지
컨테이너를 생성하는 Base가 되는 것을 Docker 이미지 라고 한다.
이미지는 docker 컨테이너가 생성될 때 실행되는 실행파일, 설정 등을 가지고 있어서 이미지를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 된다.
Docker Hub
Docker 허브는 컨테이너 이미지의 세계 최대 라이브러리 및 커뮤니티라고 부르는 Docker 이미지의 공용 저장소.
상용 소프트웨어 공급업체, 오픈 소스 프로젝트 및 개별 개발자들로부터 제공받은 100,000개 이상의 컨테이너 이미지를 보유하고 있고 Docker Hub를 이용하여 손쉽게 imaer를 pull 받아 컨테이너에 적용 시킬 수 있습니다.
Docker Hub Container Image Library | App Containerization
Docker Architecture
'스파르타코딩클럽 > Docker' 카테고리의 다른 글
Docker 시작하기 - Docker 기본 명령어 (0) | 2022.11.20 |
---|---|
(M1) Docker 설치하기 (0) | 2022.11.20 |