Docker의 웹사이트에 들어가면 바로 보이는 문구이다.
개발을 빠르게. 어디서든 실행되게.
이게 Docker를 표현하는 핵심이 아닐까 싶다.
여러 운영체제를 사용해야 하지만, 현실적으로는 한 대에 컴퓨터에는 하나의 OS가 존재한다. 한 컴퓨터로 다양한 OS를 사용하기 위해 등장한게 VM(가상머신)!
가상머신의 종류인 VMware / VirtualBox 같은 가상머신들은 OS위에 OS를 설치해야하는 상황이였다. Linux OS 위에 WindowOS나 MacOS를 설치하는 방식으로! 그러다보니 당연히 무겁고 느리다는 단점을 가지고 있는거!
가상화/반가상화가 등장했으나, 성능적인 부분이 해결이 되진 않았다.
이후 성능의 저하나 무겁고 느린점들을 개선하기위해 CPU의 가상화기술(HVM)을 이용한 KVM과 Xen(반가상화)이 등장하게 된다.
HVM(CPU의 가상화 기술)을 활용하는 KVM은 전체 가상화를 지원하며 높은 성능을 제공하는 가상화 방식. 반면, Xen은 반가상화를 사용하여 게스트 OS 간에 리소스를 효율적으로 공유하며 가상 머신을 실행한다.
컨테이너라고 하면 일반적으로 화물들을 싣는 수송용 박스라고 생각을 한다.
여기서 말하는 컨테이너의 개념도 마찬가지이다.
단지 화물을 싣는게 아닌 프로그램과 실행환경, DB서버나 WAS서버까지을 싣는다는거! 어떠한 프로그램들도 Container 것으로 추상화할 수 있다.
💡 일반적으로 알고있는 Container : 화물을 싣는다.
하나의 배에 다양한 화물 컨테이너들을 실을 수 있다.
컨테이너 안에는 다양한 물품들이 들어있다.(의류, 식료품 등)
💡 Docker Container : 프로그램과 실행환경을 싣는다.
하나의 서버에 다양한 컨테이너들을 넣을 수 있다.
OS 안에는 다양한 프로그램들이 들어있다.(Git, Python 등)
Linux가 가지고 있던 프로세스를 격리하는 기술들을 한번 더 감싼게 Docker의 Container 기술이다.
리눅스의 경우 이런 방식으로 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다. CPU나 메모리도 딱 프로세스가 필요한 만큼만 사용하기 때문에 성능적으로도 손실이 없다.
app store - program - process
docker hub - image - container
가상머신은 hostOS위에서 생성되고 관리되며, 각자의 가상머신은 자체 guestOS 체제를 가지고 있다.
최소한의 필요한 환경요소만 묶어서 서비스로 제공하기 때문에 독립성도 유지시켜주고 적은 용량으로도 운영이 가능한 형태로 발전되게 되었다.
이러한 컨테이너 플랫폼 중의 하나가 Docker
어떻게 사용?
어플리케이션을 한번만 도커이미지로 build해놓으면 AWS, Azure, Google Cloud와 같은 다양한 클라우드 환경에서도 일관되게 실행할 수 있다.