이 글에서는 Kubernetes를 배우면 가장 먼저 언급되는 컨테이너, 가상서버, Docker에 관해서 이야기 합니다.
컨테이너는 왜 등장했을까?
컨테이너는 어플리케이션을 실행하는데 필요한 설정, 소프트웨어들을 합쳐놓은 것이다.
따라서 어떤 환경에서든 구동시킬 수 있고, 여러 개의 컨테이너도 돌리 수 있다.
컨테이너와 가상 서버의 차이점은?
둘 다 한 대의 머신을 여러 사용자에게 쪼개면서도 사용자는 마치 한 대의 전용 서버를 쓰는 것 같이 이용할 수 있게 해준다.
차이점은 어떻게 분리된 느낌을 주게 하는 냐이다.
가상 서버는 가상화 소프트웨어 즉, 하이퍼바이저(Hypervisor)를 사용해 하드웨어를 공유한다.
컨테이너는 하나의 리눅스 프로세스가 마치 전용 서버에서 동작하고 있는 것 같은 분리상태를 만들어 낸다.
(정확히는 리눅스 커널의 네임스페이스와 컨트롤 그룹(cgroup)을 사용한다.)
그럼 Docker는 왜 등장했을까?
Docker없이도 리눅스 커널의 기능만으로도 컨테이너를 만들고 관리할 수 있다.
하지만...namespace로 고유한 가상화 환경을 구분하고, cgroup으로 리소스 제한과 우선순위 설정해서 프로세스 그룹의 리소스를 관리한다. CPU, 메모리, 디스크 I/O, 네트워크 대역폭 등의 컨테이너 리소스 사용량을 제한할 수 있다.
또한 chroot 기능을 통해서 프로세스가 루트 파일 시스템의 특정 디렉토리 안에서 벗어날 수 없게 격리된 파일 시스템 환경을 구축할 수 있다.
Docker 같은 Container Runtime없이도 할 수 있지만...매우 귀찮고 재사용성도 떨어진다.
Docker는 컨테이너 이미지 관리, 네트워킹, 볼륨 관리 등을 편리하게 수행할 수 있는 기능들을 제공하고, 컨테이너의 배포와 관리를 단순화시켜준다. 따라서 컨테이너 관리하기에 효율적이다.
다음 글에서는 Docker는 컨테이너 관리를 효율적으로 하기 위해서 어떤 아키텍처를 가지고 있고, Docker 관련 명령어를 알아보자.
'Kubernetes' 카테고리의 다른 글
Dockerfile 개념과 작성법 그리고 작성예시 (0) | 2023.07.23 |
---|---|
Registry(레지스트리)와 Repository(리포지토리) 차이는? (0) | 2023.07.21 |
Docker 란 무엇인가? (0) | 2023.07.21 |
컨테이너를 이해하기 위한 리눅스 기반 기술 (0) | 2023.07.19 |
Kubernetes 학습 Overview (0) | 2023.07.16 |