가상화라는 개념 이전에는 하나의 서버에 하나의 어플리케이션만 구동시켰다고 한다. 하나의 서버에 남는 자원이 많았으며, 남는 자원을 이용하기 위해 등장한 기술이 가상화 기술이다. 그 중 Hypervisor 기반의 가상화가 가장 많이 이용되었다.
VM을 생성하고 구동하는 소프트웨어로, GuestOS를 위해 CPU, RAM, Hard Disk 등 하드웨어를 가상화(분리)하여 VM의 생성과 관리를 지원하다.
Linux Interface인 cgruop을 통해 자원(HardWare Resource)를 프로세스 단위로 제어할 수 있게 하고 Linux Namespace를 통해 파일을 네트워크 인터페이스를 가상화해서 자기 자신이 소유하게 한다.
VM에서 GuestOs와 Hypervisor를 대신한다.
윈도우 환경에서 Hypervisor가 필요하다! 따라서 Docker는 Hypervisor를 안하려고 사용하는 것이기에 되도록 Ubuntu, CentOs환경을 이용하자.
Service가 더욱 micro하게 쪼개지면서 각각 개발팀마다 환경이 다르다. 개발 과정에서 모든 팀들이 컨테이너 환경을 통해 독립적으로 개발을 할 수 있게 해준다.
서비스 단위로 컨테이너를 만들어서
위 그림은 아마존과 넷플릭스의 마이크로서비스이다. 굉장히 거대하고 서로 실처럼 얽혀 있는 것을 볼 수 있다.
서비스가 더 쪼개지면 의존성이 낮아지지만 상호의존성에 대한 부분은 완전히 없어지지 않는다. 넷플릭스는 의존성을 도큐먼트화한다 API제공하여 컨테이너의 조화를 관리한다.
컨테이너가 많아지면 관리하기 힘드니, 이를 오케스트레이션 툴인 쿠버네티스를 통해 관리한다.
필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
이미지를 격리하여 독립된 공간에서 실행한 가상 환경
VM의 오버헤드를 컨테이너로 줄이고, 동일 시스템에서 실행하는 소프트웨어의 컴포넌트가 충돌하지 않게 서비스를 격리하는 기술
각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해 시스템에 독립 뷰를 제공
프로세스로 소비할 수 있는 리소스 양 (CPU, Memory, I/O, 네트워크 대역대, Device Node 등)을 제한