Docker와 컨테이너 가상화
Docker란?
Docker는 나의 프로그램, 컴퓨터 환경을 패키징 및 배포하여 다른 곳에서도 쉽게 사용하기 위한 Container 기술.
패키징 된 프로그램 모음집은 다른 컴퓨터에서도 그래도 사용 가능.
그렇다면 가상머신(VM)을 만들면 되는거 아닌가???
가상머신을 사용하면 기존에 있던 하드웨어의 자원을 나눠서 각각의 독립된 OS를 만들어야해서 무겁고 자원소모가 큼.
하지만 Docker를 사용한다면 Host OS에서 직접 실행되고, 컨테이너는 호스트와 커널을 공유함으로 적은자원을 사용하고 빠르게 시작됨.
컨테이너 가상화란?
하이퍼바이저 가상화(Hypervisor Virualization)
하이퍼바이저 가상화 기술의 도입은 하나의 컴퓨터에서 하나의 OS만 운영 하는 방식의 비효율을 해결함.
하나의 컴퓨터에서 다수의 독립적인 OS를 운영함.
하이퍼바이저는 하나의 컴퓨터에서 여러 OS를 동시 실행하기 위한 소프트웨어를 뜻한다. 하이퍼바이저 가상화는 아래와 같이 이루어져 있음.
- 하나의 물리적 서버 위에 존재하는 Host OS
- 그 위에 존재하는 다수의 독립적 OS들
이렇듯 하나의 물리적 서버 위 Host OS가 존재하고, 그 위엔 다수의 독립적 OS가 가상(virtually)으로 돌아갈 수 있도록 하는 것이 하이퍼바이저 가상화 기술. 각각의 OS는 서로에 대해 알지 못하며 Host OS조차 알지 못함. 하나의 물리적 서버에서 실행되고는 있지만 완전히 독립적인 OS로 운영되는 것임. 즉, 하나의 물리적 서버 리소스를 각각의 OS에 할당하여 효율적으로 사용할 수 있음.
컨테이너 가상화(Container Virtualization)
추가적인 Guest OS를 설치하여 가상화하는 방식은 성능면에서 이슈가 있음. 이를 개선하기 위해 프로세스를 격리된 환경에서 실행하는 기술, 즉 컨테이너 가상화 기술이 등장함.
리눅스에서는 이러한 방식을 리눅스 컨테이너라고 함. OS를 가상화하는 것이 아닌, 운영체제 수준의 가상화 기술로 리눅스 커널을 공유함과 동시에 프로세스를 격리된 환경에서 실행한다. 때문에 하이퍼바이저 가상화 방식보다 더욱 가볍고 빠르게 동작한다.
컨테이너 가상화를 통해 하나의 서버에서 다수의 컨테이너를 실행하면 컨테이너끼리 서로 영향을 끼치지 않음과 동시에 독립적으로 실행됨. 실행중인 컨테이너에 접속하여 명령어 입력하거나 패키지를 설치하는 등 다양한 작업이 가능함. 또한 CPU 혹은 메모리를 제한할 수 있으며 호스트 디렉토리에 마운트하여 내부 디렉토리로 사용할 수도 있음.
새로운 컨테이너를 만드는 데 들어가는 시간은 OS를 가상화하는 방식엔 비교할 수 없을 정도로 빠름. 그리고 하나의 프로세스(컨테이너)를 실행하는데 필요한 모든 파일을 이미지로 만들어 제공함. 때문에 컨테이너 가상화 방식을 사용하면 개발 단계부터 테스트 및 프로덕션에 이르기까지 일관된 환경을 유지할 수 있음.
참고 -
