텍스트GO 언어로 작성된 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼
컨테이너라 하면 네모난 화물 수송용 박스가 먼저 떠오른다. 컨테이너 안에는 옷, 신발 등 다양한 화물을 넣을 수 있고 규격화되어 다양한 운송수단으로 쉽게 옮길 수 있다.
서버에서도 이와 비슷한데 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.
서버 관리자 입장에서 CPU사용률이 10%대 밖에 되지 않는 활용도가 낮은 서버들의 리소스 낭비일 수밖에 없다. 그렇다고 모든 서비스를 한 서버안에 올린다면 안정성에 문제가 생길 수도 있다. 그래서 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 나타난게 서버 가상화이다. 모두가 아는 대표적인 가상화 플랫폼으로는 VM이 있다.
도커의 이미지가 실행된 상태이다. OS를 가상화하는 것이 아니라 프로세스가 격리된 공간에서 동작하는 기술이다.
º 서버(호스트 OS) 운영상에서 리소스를 논리적으로 구분하여 마치 별도의 서버인 것처럼 사용할 수 있게 하는 기술
º OS뿐만 아니라 Application단위도 가능
º 컨테이너를 생성, 삭제, 시작, 중지, 이동, 백업을 쉽게 할 수 있다.
✔ 여러가지 OS를 가상화 할 수 있고 비교적 사용법이 간단하다.
✔ 무겁고 느리다 -> VM은 OS를 자체적으로 가지고 있어야해서 용량이 커지기 때문이다.
✔ Host OS 위 Docker 엔진 위에서 바로 동작하며 Host OS 자원(커널)을 공유(논리적 구분)하기 때문에 Host OS 자원이 좋을 수록 빠르다.
✔Container 위에 Docker engine 을 설치해 또 Container를 올릴 수 있다.
즉, 어플리케이션 레벨에서는 각각의 어플리케이션을 격리해서 실행 할 수 있다. 그래서 하나의 서버에 여러 개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행할 수 있고, CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용하기 때문에 성능적으로도 거의 손실이 없다.