Jump to section

컨테이너화란?

URL 복사

컨테이너화란 소프트웨어 코드를 라이브러리, 프레임워크 및 기타 종속성과 같은 필수 요소와 함께 패키지에 포함하여 각자의 "컨테이너"로 분리하는 것을 뜻합니다.

이렇게 컨테이너화된 소프트웨어 또는 애플리케이션은 어떤 환경과 인프라에서든 해당 환경이나 인프라의 운영 체제와는 상관없이 이동할 수 있으며 일관성있게 실행됩니다. 즉, 컨테이너는 애플리케이션을 둘러싼 일종의 버블 또는 컴퓨팅 공간으로, 그 주위와 분리해주는 역할을 하는 것입니다. 기본적으로 완전한 기능을 갖춘 이식성이 있는 컴퓨팅 환경입니다.

컨테이너는 하나의 플랫폼 또는 운영 체제에서 코드를 작성하는 방식을 대체합니다. 이러한 방식은 해당 코드가 새로운 환경과 호환되지 않을 경우 애플리케이션의 이동을 어렵게 만드는 원인이었으며 수정이 필요한 버그, 오류, 결함 등이 생겼습니다. 이렇게 되면 시간은 더 많이 소요되고, 생산성은 줄어들며, 사기도 꺾이게 됩니다.

플랫폼과 인프라 전반에서 이동이 가능한 컨테이너로 애플리케이션을 패키징하는 경우 해당 애플리케이션을 어디에서든 사용할 수 있습니다. 실행하는 데 필요한 요소는 이미 패키지 안에 모두 포함되어 있기 때문입니다.

프로세스를 분리하는 아이디어는 수년간 존재했지만, 2013년 Docker가 Docker Engine을 소개하면서 비로소 개발자가 사용하기 쉬운 툴을 갖춘 컨테이너 사용의 기준이 정해졌고 패키징에 대한 범용적 접근 방식이 제시되었습니다. 그러면서 컨테이너 기술 도입이 가속화되었습니다. 오늘날 개발자는 Docker가 개척한 Open Container Initiative 표준을 지원하는 Podman, Buildah, Skopeo같은 다양한 컨테이너화 플랫폼과 툴을 선택할 수 있습니다.

컨테이너의 특성인 "경량화"와 이식성은 호스트 머신의 운영 체제 커널을 공유할 수 있기 때문입니다. 각 컨테이너에는 개별 운영 체제가 필요하지 않으며 애플리케이션은 베어 메탈, 클라우드, 가상 머신(VM)까지 어떤 인프라에서도 동일하게 실행됩니다. 이에 대한 내용은 다음 섹션에서 살펴보겠습니다. 

이와 유사하게, 개발자는 하나의 호스트 환경에서 동일한 툴을 사용해 컨테이너 작업을 수행할 수 있으므로 운영 체제 전반에서 컨테이너화된 애플리케이션의 개발과 배포가 훨씬 간단해집니다.

가상 머신(VM)은 자체 CPU, 메모리, 네트워크 인터페이스, 스토리지가 있는 가상 컴퓨터 시스템처럼 기능하는 가상 환경으로, 물리적 하드웨어 시스템에 생성됩니다(오프프레미스 또는 온프레미스에 위치).

애플리케이션이 여러 환경에서 작동할 수 있도록 애플리케이션의 완전한 분리를 허용한다는 점에서 컨테이너화와 가상화는 유사합니다. 이 둘의 가장 큰 차이점은 그 규모와 이식성에 있습니다. 

VM은 일반적으로 기가바이트로 측정되기 때문에 그 규모가 가상화에 비해 크며, 자체 OS를 포함하고 있기 때문에 여러 가지 리소스 집약적인 기능을 한 번에 수행할 수 있습니다. VM에서 사용할 수 있는 리소스가 늘어남에 따라 전체 서버, OS, 데스크톱, 데이터베이스, 네트워크를 추상화, 분할, 복제, 에뮬레이션할 수 있습니다.

컨테이너는 일반적으로 그 규모가 훨씬 작은 메가바이트로 측정되며, 애플리케이션 및 실행 환경보다 큰 것은 패키징하지 않습니다. 

VM은 전통적인 모놀리식 IT 아키텍처에 적합하지만, 컨테이너는 클라우드, CI/CD, DevOps와 같은 새로운 이머징 기술과 호환됩니다. 

컨테이너는 마이크로서비스라고 알려진 특정 태스크를 수행하는 단일 기능을 패키지하는 데 사용되는 경우가 많습니다. 마이크로서비스는 애플리케이션을 더 작고, 특화된 서비스로 분할한 것입니다. 이를 통해 개발자는 애플리케이션의 전체적인 성능에는 아무런 영향을 주지 않으면서 애플리케이션의 특정 영역에 대한 작업에 집중할 수 있습니다. 

업데이트하거나 문제를 수정하는 중에도 애플리케이션을 계속 실행할 수 있으므로 더 빠른 개선, 테스트, 배포가 가능합니다. 

컨테이너 내의 마이크로서비스는 컨테이너의 이식성, 호환성, 확장성을 모두 갖추고 있기 때문에 마이크로서비스와 컨테이너는 서로 원활하게 연동됩니다. 

그럼 이 모든 컨테이너를 어떻게 관리해야 할까요? 컨테이너 오케스트레이션을 구현하면 간단합니다. 컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다. 

쿠버네티스는 분산화되고 컨테이너화된 애플리케이션을 대규모로 관리하도록 돕는 오픈소스 컨테이너 오케스트레이션 플랫폼입니다. 소프트웨어를 실행하고자 하는 환경에서 쿠버네티스를 활용하면 플랫폼이 컨테이너를 배포하고 관리하는 데 필요한 거의 모든 작업을 처리합니다.

쿠버네티스는 Linux 컨테이너 기술의 초기 기여자이기도 한 Google의 엔지니어 팀에서 처음으로 개발하고 설계했으며, 2015년에 CNCF(Cloud Native Computing Foundation)에 기부되었습니다. 따라서 쿠버네티스 커뮤니티를 유지 관리할 책임은 전적으로 CNCF에 있으며 자발적으로 참여하는 기여자 및 관리자가 쿠버네티스 개발, 유지 관리, 릴리스를 맡고 있습니다.

Red Hat은 쿠버네티스가 출시되기 전부터 Google과 함께 쿠버네티스 개발에 참여한 최초 기업 중 하나이며, 쿠버네티스 프로젝트에서 두 번째 주요 기여자가 되었습니다.

Red Hat OpenShift엔터프라이즈용 쿠버네티스입니다. 쿠버네티스 컨테이너 관리 프로젝트의 구성 요소에, 대규모 기업 환경에 중요한 생산성 및 보안 기능을 추가한 소프트웨어 제품입니다.

"OpenShift"는 OKD 오픈소스 프로젝트(이전 명칭은 OpenShift Origin)에 뿌리를 둔 다운스트림 컨테이너 오케스트레이션 기술입니다. "Red Hat OpenShift"는 Red Hat의 컨테이너 오케스트레이션 제품군입니다. Red Hat은 사전 구성된 여러 요소와 OpenShift를 패키징하여 다음과 같은 다양한 제품으로 제공합니다.

추가 자료

문서

컨테이너와 VM 비교

Linux 컨테이너 및 VM(가상 머신)은 다양한 IT 요소를 결합해 시스템의 나머지 부분으로 부터 격리하는 패키징된 컴퓨팅 환경입니다.

문서

컨테이너 오케스트레이션이란?

컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다.

문서

Linux 컨테이너란?

Linux 컨테이너는 시스템에서 격리된 프로세스로, 이러한 프로세스를 지원하는 데 필요한 모든 파일을 제공하는 고유한 이미지에서 실행됩니다.

컨테이너에 대한 자세한 내용

제품

선택한 인프라에서 애플리케이션 출시 테스트를 완료한 통합 서비스 세트를 포함하는 엔터프라이즈 애플리케이션 플랫폼입니다.

리소스

교육

무료 교육 과정

Running Containers with Red Hat Technical Overview

무료 교육 과정

Containers, Kubernetes and Red Hat OpenShift Technical Overview

무료 교육 과정

Developing Cloud-Native Applications with Microservices Architectures