도커와 컨테이너는 많이 들어봤습니다. 이번 포스팅에서는 도커, 컨테이너에 대해 본격적으로 작성하기에 앞서 간단한 안내글을 작성하도록 하겠습니다.
왜 필요한가
이에 대한 답을 찾기 위해 VM과 Docker Container의 비교를 비교해보겠습니다
VMWare 나 VBox를 사용하여 가상화를 하게 되면 Host OS 위에 Hypervisor (HW)가 들어가고 그 위에 다시 OS가 올라가는 형태입니다.
반면 도커에서는 Docker Engine 에서 컨테이너를 생성하게 됩니다. Linux의 기술인 '컨트롤 그룹' , '리눅스 네임스페이스' 기술을 사용하여 가상화 기능을 지원하고 있습니다.
VM의 수가 늘어나는 경우 VM을 사용하는 것 보다 Docker Container를 사용하는 것이 비교적 더 빠르고 안정적입니다.
온프레미스 / 모놀리식 / 마이크로서비스
온프레미스는 클라우드가 아닌 자체 보유 전산실의 서버에 직접 소프트웨어나 솔루션을 설치하여 운영하는 방식을 의미합니다.
모놀리식에서는 서비스를 하나의 애플리케이션에 두고 같이 만듭니다. 예를 들어 메일 관련된 서비스, 블로그 관련된 서비스 등 각각의 서비스를 하나로 컴파일합니다. 이런 식으로 하면 한번 컴파일할 때 오래 걸리고 작은 업데이트에도 테스팅의 작업이 오래 걸립니다.
마이크로 서비스로 개발하게 되면 각각의 서비스를 분리하여 개발할 수 있고 작은 업데이트도 서비스별로 진행할 수 있습니다. 이렇게 각각 개발을 해도 컨테이너 환경을 쓰기 때문에 서로에게 영향을 주지 않습니다. 또한, 스케일업을 진행할 때도 많이 사용하는 서비스 위주로 자원을 사용하게끔 배치할 수 있어 효율적인 사용이 가능합니다.
Kubernetes
Docker를 다룰 수 있는 도구입니다. Contianer 가 많을 때 이를 관리하기 위한 도구입니다.
Docker
컨테이너 기술을 지원하는 다양한 프로젝트 중에 하나입니다. 컨테이너 기술의 사실상 표준이라 할 수 있으며 리눅스, 윈도우, MacOS등 다양한 운영체제에서 사용이 가능합니다. 하지만 리눅스 커널을 사용하기 때문에 윈도우에선 Hypervisor를 통해 사용하기 때문에 부하가 있는 편이라 리눅스에서 사용하시는 것을 추천드립니다.
리눅스의 네임스페이스와 cgroups와 같은 커널기능을 통해 가상화를 지원하고 있습니다.
컨테이너 관련 기술
리눅스 네임 스페이스 : 각 프로세스가 독립적으로 동작하게끔하는 것입니다. 즉, 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해 시스템에 독립 뷰를 제공합니다.
리눅스 컨트롤 그룹 : 프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대, device 노드 등)을 나눠줘서 독립된 환경에서 리소스 사용 양을 제한하고 있습니다.