만약 개발팀이 여러 언어를 쓴다고 가정하면, 그것들이 충돌되지 않게 하나의 컴퓨터에서 돌리려면 신경써야 할 것이 많다. ==> 가상환경 이용
vmware, vbox 같은 것들은 무겁다.
하이퍼바이저 기술을 이용해 하드웨어를 추상화
운영체제 위에 하이퍼바이저 설치해서 하드웨어 구현
그 위에 운영체제 설치 == 무거워(os 위에 또 애플리케이션 쌓겠지..)
hw, os를 빼면?? ==> 컨테이너 나옴
리눅스 네임스페이스 : 공간을 별도로 할당해서 공간에서 프로세스가 서로 간섭하지 못하도록 하는 논리적 방어막
리눅스 컨트롤 그룹(Cgroup;Control group) : cpu, 메모리, 네트워크 대역대, 디바이스 다루는 가상 환경 제공
리눅스에서는 기본적으로 위 기능 탑재, 얘를 통해 도커는 가상화 이룬다.
(윈도우에서는 하이퍼바이저가 필요하므로 되도록 리눅스에서 도커를 써라)
참고1
참고2
vmware vs container perfomance
A Comparative Study of Containers and Virtual Machines in Big Data Environment
모놀리식, 마이크로서비스
모놀리식 : 서비스를 한꺼번에 묶어서 관리, 한 번 컴파일할 때 많은 시간 소요한다는 단점 존재
(걍 내 플젝 생각하면 됨)
마이크로서비스 : 개발팀 개별적으로 서비스 구축, 서로 다른 환경을 이용할 수 있어서 영향x
==> 자원의 효율성, 프로세스 단순화
컨테이너도 서비스별로 만들고 있다
aws microservice