1. 컨테이너와 도커의 이해 - 컨테이너를 쓰는이유 / 일반프로그램과 컨테이너프로그램의 차이점

210715

컨테이너가 뭐에요?

왜 컨테이너를 배워야 하나요?

이 시대가 원하고 있기 때문!

  • 어떤 시대인데?

    • 소프트웨어 운영 플랫폼이 바뀌고 있다!

  • 과거 시장에서는 한 시스템에서 여러 애플리케이션을 실행했다

시대가 변화하면서 하드웨어의 가격은 싸지고, 각 애플리케이션의 수는 증가하고 높은 성능을 요구한다.

  • 하이퍼 바이저라는 소프트웨어 기술을 통해 여러 가상 컴퓨터를 운용했다.

  • 하이퍼 바이저 위에 여러 가상 머신을 두고 각각의 OS를 운용

이후, 이용자의 요청에 따라 필요할 때는 크게, 필요하지 않을 때는 작게 운용할 필요성을 느낌

  • 그래서 사용하는 것이 컨테이너

  • OS위에 컨테이너 엔진을 둠

  • 컨테이너 엔진 위에 컨테이너 애플리케이션을 둠

    • 컨테이너 애플리케이션은 무게가 작고 확장성이 좋고 배포가 쉽다

만약 과일이나 생선을 컨테이너에 담는다면 냉동, 냉장, 건조 등의 유통환경이 구성되어야 한다.

  • 이러한 설비(=유통환경)를 미리 마련해야 한다

마찬가지로 소프트웨어에서 컨테이너는 애플리케이션을 실행하기 위한 설비가 구성되어야 한다

  • Node.js나 OS 등이 구성되어 있어야 함

왜 굳이 리눅스에서 돌려요?

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

  • chrrot : 독립된 공간 형성

  • namespace : 6가지 isolate 기능 지원

    • 컨테이너가 독립성을 갖게 해줌

  • cgroup : 필요한만큼의 HW를 지원

이러한 커널의 기능을 가지고 컨테이너를 만들 수 있다. 이러한 기능들을 컨테이너에서 쓸 수 있게 해주는 것이 컨테이너 엔진이다.

윈도우나 맥에서는 리눅스 커널이 없는데?

  • Hypervisor, 하이퍼바이저를 활성화 시켜서 OS 위에서 컨테이너를 구성한다.

  • 이 하이퍼바이저는 리눅스 커널 기능을 서포팅 한다.

리눅스는 하이퍼바이저 없이 바로 도커를 올릴 수 있다.

그냥 프로그램이나 컨테이너는 어떻게 다른가요?

하는 일은 같다. 생긴 모양이 다를 뿐. 컨테이너 안에 집어넣으냐 밖에서 쓰냐 차이.

컨테이너 애플리케이션

  • 빈 컨테이너를 생성

  • 코드 실행환경 설치

    • 예를 들어 app.js 를 실행하기 위해서 Node.js 를 설치

  • 코드 실행

그래서 왜 쓰나요?

일반 애플리케이션이나 컨테이너 애플리케이션이나 똑같은데 왜 후자를 써야하나?

  • 개발자가 만든 그대로 어디서든 돌아가기 때문

  • 확장과 축소가 쉽다

  • MSA, Devops에 적합

    • Micro Service Architecture

    • 고객에 처리해 빠르게 응답할 수 있는

이전에는 개발자가 만든 프로그램과 고객사에서 실행되기까지 시간이 걸렸음

  • 서로의 작업 환경이 다르기 때문

그러나, 컨테이너의 등장 후 개발자나 고객사나 또는 어디서든 이러한 구조가 동일하기 때문에 바로 실행이 된다.

  • 개발자가 만든 프로그램이 운영단에서 바로 실행될 수 있음

또한 확장성의 강점을 갖는 이유는 다음과 같다

  • 이전에는 애플리케이션을 확장하기 위해 추가적인 애플리케이션을 두면서 OS도 같이 확장이 되었음 (OS는 확장 안하면 좋겠지만 추가적인 애플리케이션을 돌리기 위해서 어쩔 수 없이 OS까지 확장)

  • 도커에서는 컨테이너를 사용하면 확장성이 좋아진다. (한개의 OS에 여러개의 App을 추가할 수 있기 때문)

MSA : 작게 작게 나누어서 프론트단의 기능별로 만들어 내는 서비스를 제공하는 것

Devops : 개발자가 개발에서 서비스 운영까지를 자동화 할 수 있게 해주는 것

Last updated

Was this helpful?