티스토리 뷰

1. 컨테이너의 개념

 

우리가 Application 개발을 한다고 생각해 보겠습니다.

사용 언어와 라이브러리를 포함해 많은 자원이 필요한데, 항상 개발 환경과 운영 환경이 일치하지 않기 때문에 다양한 문제가 발생할 수 있습니다. 소프트웨어의 규모가 커지고 복잡해질수록 문제는 심각해지는데, 이를 "Dependency Hell" 이라고 표현합니다.

어떤 소프트웨어를 설치하기 위해 다른 라이브러리 - 또 다른 라이브러리를 끊임없이 의존할 경우, 혹은 버전이 달라질 경우 의존성 지옥에 빠지게 되는데요, 이와 같은 Application 종속성 관리의 어려움을 해결하기 위한 대안이 바로 컨테이너입니다.

 

컨테이너의 기본 아이디어는 운영 환경 일치를 위해 가상화된 환경을 구축하는 것입니다.

어떤 환경에서나 실행 가능하도록 필요한 모든 요소를 가상의 "컨테이너"에 담을 수 있다면, 별도의 환경 없이도 얼마든지 소프트웨어를 활용할 수 있을 테니까요.

 

 

다시 말해 컨테이너는 격리된 환경에서 안정적으로 실행 가능한, 이식성이 있는 runtime(=실행 환경)을 구성하는 기술입니다.

 

 


2. Virtualization vs Containerization

 

가상화 시스템은 크게 Virtualization(가상 머신)과 Containerization(컨테이너) 두 가지로 구성할 수 있습니다.

 

 

Virtualization
가상 머신 가상화
Containerization
컨테이너 가상화
설치 이미지 + 실행 이미지 설치 이미지, 단일 포맷
OS 존재 OS 필요 X → 빠르게 동작
이식성 good
DevOps - Agile 기법에 최적화

 

 

가상머신(VM)과 컨테이너

 

 

왼쪽처럼 가상머신으로 구성하는 경우를 먼저 살펴보겠습니다.

가상 머신은 설치를 위한 이미지 파일(.iso) + 실행을 위한 이미지 파일(.vdi, .qcow2, .vmdk 등)이 필요합니다.

특히 그림 같은 경우는 기존 HostOS 위에 가상머신이 올라가고, 그 위에 Rocky가 올라가는 구조입니다. 이렇게 커널이 많아져 전달 작업이 많아질수록 퍼포먼스는 크게 저하됩니다. 

 

더보기

*** 이미 하이퍼바이저(Hypervisor)를 통해 가상화된 환경 안에서 실행되는 가상화, 즉 가상머신이 중첩되는 구조를 Nested Virtualization 이라고 합니다. (리눅스의 기본 하이퍼바이저인 KVM, vmware의 EXSi는 중첩 가상화를 지원)

Virtualization Hypervisor = 가상 머신을 관리하는 소프트웨어

 

 

그러나 컨테이너의 경우는 OCI (Open Container Initiative) 하나만 존재하며 어떤 솔루션을 쓰더라도 호환이 가능하다는 특징이 있습니다. 뿐만 아니라 설치를 위한 이미지 파일 하나만 필요하고, 운영체제도 필요하지 않으므로 동작이 빠르다는 이점을 가집니다.

 

 

 

 

Scale out 과 load balancing

 

 

 

그리고 처리 속도가 빨라지면 scale out(장비의 수를 늘려 처리 능력 향상)을 통해 부하 분산이 가능해집니다. (보다 다이내믹한 자원 활용!)

 

 


3. 컨테이너 이미지 및 레지스트리

 

Container ← Image ← Registry (이미지 저장소)

 

컨테이너 이미지 : 컨테이너 생성 및 실행에 필요한 모든 런타임과 설정 값이 있는 파일

컨테이너 레지스트리 : 이미지를 저장하고 검색할 수 있는 repository

 

Registry 

— public (ECR, GCR, ACR, quay.io, docker.io)

— private (quay, harbor, nexus3, gitlab)

 

 


4. 컨테이너의 특징

 

강력한 호환성

 

대표적인 컨테이너 관리 툴은 다음과 같으며 모두 OCI와 호환되고, 모든 Linux 컨테이너를 관리할 수 있습니다.

 

Podman 컨테이너 이미지 관리
Skopeo 이미지 삭제 툴 (podman으로는 레지스트리의 이미지 삭제 불가능)
Buildah 이미지 생성 툴

 

*** dnf install -y container-tools 위 세 패키지를 한 번에 제공

 

 

높은 자원 활용 효율성

 

CPU가 8 core의 multithreading을 지원한다고 가정할 때, 가상머신은 최대 16개를 생성 가능하지만(16 vCPU) 컨테이너는 이론 상으로 1600개도 생성 가능합니다. (1vCPU = 1000ms)

 

컨테이너에 할당할 자원의 양은 request와 limit으로 정의할 수 있는데, 컨테이너 생성 시 limit 설정을 통해 실행 중간에 메모리가 더 필요할 경우 최대로 사용할 수 있는 양을 정할 수도 있습니다.

 

 

Immutable system

 

컨테이너는 변경 사항 발생 시 update가 아닌 기존 시스템을 삭제 후 다시 생성하는 방식을 택합니다.

"변화를 허용하지 않는다" 는 특징을 가지고 있는데, 이는 컨테이너의 빠른 실행 속도 때문에 얼마든지 삭제와 생성이 가능하기 때문입니다.

+) kubernetes에서는 자동으로 rolling update(내리고+올리고)하는 작업을 제공합니다!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함