컨테이너가 뭐고 왜 쓸까?

나의글·2024년 4월 28일

Container

목록 보기
1/3

이 글은 이성미 강사의 따배도 강의를 보고 작성한 글입니다.

배경


출처: https://itwiki.kr/w/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_%EA%B0%80%EC%83%81%ED%99%94

전통적인 단일 환경

과거에는 BareMetal의 하나의 시스템에 여러가지 어플리케이션을 운영하다가, 점차 하드웨어 가격이 작아지고, 성능은 좋아지고, 운영해야할 어플리케이션은 많아져 가상화 플랫폼으로 옮겨지게 되었다.

가상화 플랫폼

가상화 플랫폼에서는 Hypervisor위로 가상 운영체제를 설치하고 그 위에 어플리케이션을 올리게 되었다. 그런데 이 가상환경 위에 운영해야하는 어플리케이션이 많아지면서, 이러한 가상환경 플랫폼으로는 한계가 생기게 되었다.

컨테이너 플랫폼

그래서 나타난게 컨테이너 플랫폼이다. 컨테이너로 운영되는 어플리케이션은 용량이 작다. 실제 어플리케이션과 그걸 실행할 수 있는 최소한의 환경만 들어가 있기 때문이다.

그리고 isolated되어있고, 확장성이 좋다.

APP과 그걸 실행하기 위한 라이브러리 또는 NodeJS같은 환경을 컨테이너에 넣는다.

왜 굳이 리눅스에서 돌려야 할까?

=>리눅스 커널 기능을 써야 하기 때문이다.

chroot

독립된 공간 형성

namespace:

Isolate 기능 지원: 하나의 컨테이너와 하나의 다른 컨테이너가 완전히 독립될 수 있도록 한다.

cgroup

필요한만큼 HW를 지원해준다.

이 기능들은 모두 리눅스 커널에 있다. 이 리눅스 커널에 있는 기능을 기반으로 해서 컨테이너를 만든다.

windows와 Mac OS는 커널이 없기에 Hypervisor 기능들을 활성화 해야 컨테이너를 돌릴 수 있게 된다.

그냥 프로그램과 컨테이너는 뭐가 다를까?

일반 프로그램: 서버 프로그램인 app.js가 있다. 이것은 nodeJS기반에서 동작하므로 이 서버 프로그램을 실행하기 위해서는 그 전에 먼저 nodeJS를 설치해야한다.

컨테이너: dockerfile을 통해 nodeJS와 app.js를 가지고 컨테이너 빌드한다. 이 컨테이너를 실행하면 자동으로 서버 플로그램을 실행한다.

그래서 왜 쓸까?

개발자가 만든 그대로 어시서든 돌아간다.
확장/축소가 쉽고, MSA, DEVOPS에 적합하다.

개발자가 application container를 만들면 A고객사에 제공을 한다. 고객사는 원래 개발자가 어플을 만들 때 사용한 환경과 다르기에 고객사의 환경에서 어플을 돌린거와 결과가 다를 수 있다. 하지만 컨테이너 기반으로 만들어서 제공을 하면 컨테이너를 돌리면 같은 결과가 나온다. 즉, 환경에 구애받지 않는다.

또한, 컨테이너의 용량이 100MB라고 하자. scale-out을 하고 싶으면 그저 컨테이너를 하나 더 설치하면 되는 것이다. 그러면 200MB가 소요되는 것이다. 즉, 확장 축소에 매우 유리하다.

profile
기록 velog

0개의 댓글