컨테이너가 뭔가요?
컨테이너를 배워야 하나요?
위의 사진에서 왼쪽에서 오르쪽으로 소프트 웨어 운영 플랫폼이 바뀌고 있다.
1.Bare Metal
대용량 Bare Metal(어떠한 소프트웨어도 담겨있지 않는 하드웨어)에서 필요한 애플리케이션을 돌리는 방식이다.
2.Virtualization
Virtualization의 Hyperviser은 Hyperviser위에 소프트웨어적인 기술을 가지고 가상머신을 만든 뒤 가상머신 안에서 필요한 애플리케이션을 돌리는 가상화 플랫폼 방식이다.
3.Any infrastructure
Scale out, Scale in 하면서 서비스 중단없이 애플리케이션을 운영하는 환경이 필요했다.
똑같은 Bare Metal 시스템에 OS를 올리고 Container Engine(Docker는 Container Engine중 하나이다.)을 올린다.
Container플랫폼을 운영하면서 Container애플리케이션을 돌리는 것이다.
Application의 Scale out(확장)과 Scale in(축소)가 쉽다.
하나의 프로그램화 되므로 적은 용량이 고립 되어 있으므로 확장성이 좋고 배포가 쉽다.
컨테이너를 사용하는 이유에 대해서 과일을 배송하는 예로 생각해 보자!!!
과일을 컨테이너에 넣어서 배송한다.
이때 컨테이너의 환경은 과일을 어떻게 배송할지에 따라서 달라진다.
건조된 과일을 보낼 것인지, 냉동 과일을 보낼 것인지, 일반 과일을 보낼 것인지 등에 따라 컨테이너의 환경은 달라 질 것이다.
이렇듯 과일의 상태에 따라서 다른 컨테이너 환경을 준비 해야 한다.
과일을 배송하기 위해서 다양한 환경을 설정한 컨테이너가 필요로 하듯, 애플리케이션을 동작시키기 위해서 각 각 필요로 하는 환경설비, 라이브러리, 소프트웨어플랫폼이 다른데 이러한 환경을 독립적으로 만들어서 애플리케이션을 동작시켜주는 공간을 컨테이너라고 한다.
왜 리눅스에서 실행할까?
컨테이너라는 기본적으로 리눅스 커널의 기능을 가지고 만들어진 것이다.
리눅스 커널에 있는 chroot, namespace, cgroup 기능으로 만들어 졌다.
chroot
독립된 공간 형성
namespace
독립된 공간안에 6가지의 isolate 기능지원
cgroup
필요한만큼 HW지원
리눅스 커널에 있는 기능들을 Docker 플랫폼에서 쓸 수 있도록 지원해주는 것이 Container Engine이다.
리눅스 커널이 없으면 Container를 돌릴 수 없다.
Window나 macOS에서는 리눅스 커널이 없기 때문에 Hypervisor를 활성화해서 컨테이너를 돌린다.
그러므로 실제 현장에서는 Window나 macOS 기반으로 서비스를 운영하는 것이 아니라 라이센스 비용이 들어가지 않는
Linux기반으로 Container Engine을 세우고 그 위에 Container를 동작시키려고 한다.
일반프로그램과 컨테이너의 차이
결과적으론 같은 일을 하나 구조가 다를 뿐이다.
컨테이너 기반이냐, 아니면 애플리케이션 운영환경에서 바로 사용하는 기반이냐의 차이이다.
왜 사용하는가
1.개발자가 만든 그대로 어디서든 돌아가게 할 수 있다.
확장(scale out) 축소(scale in)가 쉽고, MSA(MicroService Architecture), Devops에 적합하다.
고객의 요구에 빠르게 응답할 수 있는 기술이 필요하다.
이전의 개발자들이 직면한 문제는 개발환경과 운영환경이 다르므로 어려움이 있었다. 컨테이너는 운영환경을 컨테이너 안에 넣었다. 개발자가 만든 애플리케이션이 운영환경에서 똑같이 동작 할 수 있다.
MSA 작게작게 나누어서 기능별로 만들어 내서 서비스를 하려는 것
Devops 개발자가 개발에서 서비스 운영까지를 자동화하는 것
2.유휴자원을 줄일 수 있다.
가상머신에 만들어서 돌리면 다섯대로 늘릴 시 가상머신을 늘릴때 마다 필요없는 자원까지 확장 해주어야 한다. 확장 될때 os까지 확장해야 한다.
YouTube Dokcer 강의
https://www.youtube.com/watch?v=3HId-tpYaZs&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=2