컨테이너란 ?
컨테이너는 실행에 필요한 모든 파일을 포함한 전체 실행환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술이다. 이를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경(개발, 테스트, 프로덕션 환경 등)간에 쉽게 이동할 수 있다. 컨테이너 파이프라인에 보안을 구축하고 인프라를 보호하여 컨테이너의 안정성, 확장성, 신뢰성을 보장할 수 있다. 또한 일관된 행동과 기능으로 퍼블릭, 프라이빗, 하이브리드 클라우드 환경과 데이터센터 간에 컨테이너화 된 애플리케이션을 손쉽게 이동할 수 있다.
라고 https://www.redhat.com/ko/topics/containers 에 정의되어 있는데, 나는 처음읽었을때 한번에 제대로 이해를 하지 못했었다. 그래서 나만의 방식으로 조금 더 쉽게 설명해놓고자 해본다.
컨테이너를 도시락 이라고 생각해보자.
우리가 음식을 도시락에 담으면, 그 음식은 어디를 가도 도시락 안에 담긴 상태 그대로 유지된다.
학교에 가서 열어봐도, 소풍을 가서 열어봐도 집에서 싸온 그대로 이지 않는가 ? (막 이리저리 굴려서 돌려서 이런거 빼고 ... )
"컨테이너" 는 앞서 설명한 도시락과 같이 프로그램과 그 프로그램이 필요한 모든것(재료들)을 한곳에 담아놓는 기술이다.
이렇게 한다면 이 프로그램을 어느 컴퓨터에서 실행해도 문제없이 잘 돌아간다.
집에서 만들고, 학교에서 열어보는 것과 같이 말이다.
그렇다면 컨테이너를 쓰는 이유는 ?
더 쉽게, 더 빠르게, 더 효율적으로 프로그램을 실행하고 관리할 수 있기 때문이다. 앞서 설명한 도시락에 비유를 하게 되자면,
- 경량성 : 도시락을 싸면 큰 가방 없이 간편하게 들고 다닐 수 있는 것처럼, 컨테이너는 컴퓨터에 부담을 주지 않고 가볍게 실행된다.
- 종속성 포함 : 도시락에 숟가락, 젓가락을 다 챙기면 어디서든 바로 밥을 먹을 수 있다.
컨테이너도 프로그램이 필요로 하는 모든 걸 한번에 다 담아두기 때문에, 다른 컴퓨터에서도 바로 사용이 가능하다. - 이식성 : 도시락을 싸서 학교에 가거나 소풍에 가도 똑같이 먹을 수 있는 것처럼, 컨테이너도 어느 컴퓨터에 가도 똑같이 작동한다.
- 격리성 : 친구 도시락과 내 도시락은 서로 섞이지 않지 않는가?
마찬가지로 컨테이너 안의 프로그램들은 서로 영향을 주지 않도록 따로따로 구분돼 있다.
컨테이너의 종류
컨테이너 관리 도구는 다음과 같이 도커 외에도 여러가지가 있다.
- 컨테이너디(Containerd) : Docker 에서 만든 오픈 소스 컨테이너 관리 도구로, 컨테이너의 실행, 관리 같은 핵심적인 작업을 담당한다. 컨테이너 런타임 역할을 하며, 특히 쿠버네티스(Kubernetes) 와 쉽게 연동될 수 있도록 설계 되었다. 클라우드 네이티브 컴퓨팅 재단(CNCF) 의 중요한 프로젝트로 인정 받았으며, 쿠버네티스와 통신하기 위해 필요한 표준(CRI) 을 지원한다. 이 도구는 다른 시스템과 통합해서 컨테이너를 관리할 수 있게 해주므로, 컨테이너 관리 시스템을 직접 구축하거나 개발하는데 유용하다.
- 크라이오(CRI-O) : 쿠버네티스(Kubernetes) 와 연동하기 위해 설계된 가벼운 컨테이너 런타임 도구이다. 크라이오는 쿠버네티스 표준(CRI) 에 맞춰 개발되어, 쿠버네티스가 컨테이너를 더 쉽게 관리할 수 있도록 해준다. 도커처럼 큰 기능을 모두 갖춘 것이 아니라, 쿠버네티스와 컨테이너 실행에 필요한 최소한의 기능만을 제공하고 있기 때문에 더 가볍고, 필요한 자원이 적어 효율적이다. 주로 쿠버네티스 클러스터에서 사용되며, 쿠버네티스와 직접적으로 통합되는 데 최적화 된 도구이다.
- 카타 컨테이너(Kata Containers) : 컨테이너의 가벼움과 가상 머신(Virtual Machine, VM)의 보안성을 결합한 컨테이너 기술이다. 일반적인 컨테이너는 자원이 적게 들고 빠르지만, 보안 측면에서 운영체제 커널을 공유하기 때문에 보안이 다소 약할 수 있다. 카타 컨테이너는 이 문제를 해결하기 위해 컨테이러는 VM 처럼 격리 시킨다. 각각의 컨테이너가 별도의 커널에서 실행되어 서로 격리된 상태가 된다. 이렇게 되어 컨테이너가 가지고 있는 경량성과 빠른 시작 시간의 장점은 유지하면서도, VM 수준의 보안을 제공한다.
- 도커(Docker) : 컨테이너 기반 가상화 플랫폼으로, 애플리케이션을 쉽게 포장하고 배포하며 실행할 수 있게 해주는 도구이다. 가장 대중적이게 사용되는 컨테이너 관리 도구이며 컨테이너 관리 기능 외에도 컨테이너를 실행하는 데 필요한 이미지를 만들거나 공유하는 등의 다양한 기능을 제공한다. 도커는 사용자가 명령어를 입력하는 명령어 도구(Command Line Interface, CLI)와 명령을 받아들이는 도커 데몬으로 구성되어 있다. 도커 1.11 이전에는 도커가 직접 컨테이너를 제어했으나 이후부터는 컨테이너를 제어하기 위해 별도의 컨테이너디를 포함하고 있다.
- 파이어크래커(Firecracker) : AWS(Amazon Web Service) 에서 개발한 가벼운 기상화 기술로, 서버리스 컴퓨팅 및 컨테이너 워크로드를 위해 설계 되었다. 파이어크래커는 마이크로VM 이라는 개념을 사용하여 매우 가벼운 가상 머신을 실행하는 방식으로, 보안과 빠른 부팅 시간을 동시에 제공한다. 따라서 파이어크래커는 서버리스 애플리케이션이나 대규모 클라우드 환경에서 컨테이너와 가상 머신의 장점을 결합하여, 빠르고 안전하게 실행하는 경량 가상화 기술이다.
컨테이너와 같이 알아야 할 개념들 ?
컨테이너 개념을 공부할 때, 함께 알아두면 좋은... 아니 함께 알아야 하는 개념들은 다음과 같다.
- 이미지 (Image)
- 도커 (Docker)
- 가상화 (Virtualization)
- 가상머신 (Virtual Machine, VM)
- 마이크로서비스 아키텍쳐 (Microservices Architecture)
- 컨테이너 오케스트레이션 (Container Orchestration)
- CI/CD (Continous Integreation / Continuous Deployment)
- 네임스페이스 (NameSpaces) 와 cgroups(Control Groups)
- 도커 허브 (Docker Hub)
- 볼륨 (Volume)
그래서 이제부터 하나하나 차근차근 개념 정리를 해 나가볼 예정이다.
'개인공부' 카테고리의 다른 글
VMware Fusion, RKE2 Master Node 설치 (1) (3) | 2024.12.09 |
---|---|
Socket.IO (0) | 2024.12.03 |
Chat Gpt 가 내준 컨테이너 관련 문제 10개 (2) | 2024.10.13 |
Kafka 란 무엇인가 ? (0) | 2024.10.02 |
도커의 이해 (0) | 2024.09.29 |