1. 컨테이너와 도커의 이해 - 컨테이너를 쓰는이유 / 일반프로그램과 컨테이너프로그램의 차이점
210715
Last updated
Was this helpful?
210715
Last updated
Was this helpful?
이 시대가 원하고 있기 때문!
어떤 시대인데?
소프트웨어 운영 플랫폼이 바뀌고 있다!
과거 시장에서는 한 시스템에서 여러 애플리케이션을 실행했다
시대가 변화하면서 하드웨어의 가격은 싸지고, 각 애플리케이션의 수는 증가하고 높은 성능을 요구한다.
하이퍼 바이저라는 소프트웨어 기술을 통해 여러 가상 컴퓨터를 운용했다.
하이퍼 바이저 위에 여러 가상 머신을 두고 각각의 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 : 개발자가 개발에서 서비스 운영까지를 자동화 할 수 있게 해주는 것