컨테이너
Software의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술
컨테이너랑 가상 머신의 차이
가상머신(VM, Virtual Machine)
VM은 HyperVisor 위에서 실행되며, 이 하이퍼바이저가 컴퓨터 VM 별로 인프라 리소스를 배분하는 역할로 사용한다. 또한 각 VM에선 독립적인 Guest OS를 가지고 있는데, 독립적인 플랫폼을 하나씩 증가시킬 때마다 불필요한 OS를 만드는 작업에 대해서 계속해서 해야한다.
즉, 가상머신 자체는 확장성이 떨어진다는 소리다. 또한 메모리나 자원에 관해서 유동적으로 관리 되는게 아니라 처음부터 정해놓고 실행하기에 비효율적이다.
ps.)하이퍼바이저(Hypervisor)는 하나의 물리적 컴퓨터에서 여러 개의 가상 머신을 생성하고 관리하는 소프트웨어, 하이퍼바이저는 하드웨어와 가상 머신 간의 중재 역할
컨테이너
컨테이너의 경우 하나의 Host OS위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행된다. 불필요한 OS만드는작업 및 Infra를 독립적으로 나눌 필요가 없어서 확장성이 좋고 빠르다.
컨테이너 장점 정리
- 애플리케이션 레벨 고립
- VM보다 빠른 셋업
- VM보다 메모리 덜 소모
- 마이그레이션, 백업, 전송이 쉬움. VM과 비교해 크기가 작기 때문이다.
- 하드웨어와의 빠른 커뮤니케이션은 따라, 성능에 효과적일 수 있다.
- 애플리케이션 배치와 유지보수를 향상시킨다.
- 애플리케이션 전달 시간 감소
요약
VM은 OS를 포함한 전체 시스템 환경을 가상화하여 독립적인 OS를 실행
하지만, 컨테이너는 무겁게 OS가 필요하지 않으며, 가볍게 애플리케이션과 그를 실행시키는 라이브러리 및 의존성만 가지고 있으면 됨.
커널과 컨테이너
커널과 컨테이너를 헷갈려 하는 경우가 꽤 있고 면접 질문으로도 받았던 케이스
둘의 가장 큰 차이는 커널(Kernel)의 경우 프로세스 단위로 격리가 일어나며, 하드웨어와 소프트웨어의 중재자 역할이다. 또한 OS에 종속적이다.
컨테이너의 경우 다양한 환경에서 일관된 실행을 보장하며, 애플리케이션을 기준으로 격리한다.
구분 커널 컨테이너
역할 | 시스템 자원 관리 및 하드웨어와의 중재 | 애플리케이션을 격리된 환경에서 실행 |
자원 사용 | 상대적으로 무겁고, 많은 자원을 소모 | 경량이며, 빠르게 시작하고 종료 가능 |
격리 수준 | 프로세스 간 격리 | 애플리케이션 간 격리 |
이식성 | OS에 종속적 | 다양한 환경에서 일관된 실행 가능 |
Docker
도커는 컨테이너 기반의 가상화 플랫폼
Docker를 사용하면 인프라에서 애플리케이션을 분리하여 컨테이너로 추상화시켜 소프트웨어를 빠르게 제공할 수 있다는 점이 장점
또한 앞서 말한 것 처럼 컨테이너의 성질이 있어 주어진 하나의 호스트OS안에서 여러 컨테이너를 동시에 실행 할 수 있다.
또한 도커는 컨테이너의 라이프 사이클을 관리하고 어플리케이션을 오케스트레이션(Work flow의 자동화)된 서비스로 배포할 수 있다.
Docker의 아키텍처
Docker는 보이는 것처럼 Client - Server 아키텍처를 가지고 있다. 도커 클라이언트와 도커 데몬이RestApi를 사용하여 이를 통신한다.
'Tech-Interview' 카테고리의 다른 글
[Redis] Redis Eviction 정책 (0) | 2025.03.07 |
---|---|
사용자 증가에 따른 서버확장 (0) | 2024.12.08 |
JPA ID 생성전략 (0) | 2024.12.06 |
JPA N+1 문제 (0) | 2024.11.28 |
리터럴 String과 new String()의 차이 (0) | 2024.11.13 |