컴포넌트들이 서로 달라서 앱 스택 개발에 문제가 있다.
기초가 되는 운영 체제와의 호환성 문제
모든 서비스가 사용하려는 운영 체제의 버전과 호환이 되어야 하는데 그렇지 않은 경우 호환이 되는 운영체제를 찾아야 함
운영체제에 서비스 라이브러리와 의존성
애플리케이션의 아키텍처가 업그레이드 될때마다 컴포넌트와 인프라 간 호환성을 확인해야 함 -> 지옥의 매트릭스(The Matrix from Hell)
새로운 개발 환경 구성하기 어려움
호환성 문제 해결, 컴포넌트를 수정하거나 변경하면서도 다른 컴포넌트에 영향을 주지 않으면서 운영체제도 수정할 수 있음
각자의 의존성과 라이브러리를 갖춘 분리된 컨테이너를 활용해 같은 가상머신과 운영체제에서 환경과 컨테이너 분리 가능
모든 운영체제에는 동일한 Linux 커널
이 있지만 일부 커스텀 소프트웨어 때문에 서로 다른 운영 체제가 됨
도커 컨테이너들은 같은 커널을 공유 -> 기반 운영체제가 Ubuntu라면 커널이 Linux를 사용하니까 데비안, 페도라, 센토스 등을 사용할 수 있고 모든 운영 체제와 호환되는 도커 호스트 기반 커널을 사용할 수 있음
하이퍼바이저와 도커 중에 더 나은 것이 있는게 아니라 같이 사용해야 함.