Container란?
- Application이 동작하기 위해 필요한 요소를 Package화하고 격리하는 기술
- Infra를 쉽고 빠르게 관리할 수 있다.
- 가상화를 통한 변화하는 환경에 대해서 비교적 빠르게 대처할 수 있었지만 더욱더 산업이 가속화되고 성능의 고도화가 됨에 따라 더욱 빠르게 처리할 수 있는 기술이 필요하게 되었다.
- VM에서 Guest OS와 가상 하드웨어를 빼고 Hypervisor를 덜어내고 자원 할당은 LXC(LinuX Containers)가 하는 방식으로 하여 빠르고 효율적인 서버 관리가 가능해졌다.
- 이로써 얻는 장점은 이와 같다.
- 하나의 물리 서버 혹은 가상 서버 위에 여러 개의 Container 기동과 더불어 H/W를 효율적으로 사용해 Infra의 사용률을 향상시킨다.
- 설치 작업 및 시간, Network 및 Volume의 SDO(Software Defined Object)화, OS등의 이미지를 얻음으로써 얻는 빠른 기동 시간.
- Application 실행에 필요한 S/W를 포함한 Container가 작성 가능하고 종속성 배제가 가능하기 때문에 불변 실행 환경의 구축이 가능하다.
- Linux kernel의 기술은 다음과 같다.
- Namespace : Container가 하나의 독립된 서버와 가이 동작할 수 있게 해주는 기술. 특정 Process를 다른 Process와 분리시켜 같은 Namespace 안에서만 접근이 가능하다.
- Control Group : Process별로 자원에 대한 성능을 감시하고 제어한다.
- Union File System : 다른 Filesystem에서 File 혹은 Directory를 겹쳐서 하나의 일관된 Filesystem으로 사용할 수 있게 해주는 기술. Docker에서는 overlay2 구현체를 사용한다.
※ LXC
- 단일 컨트롤 호스트 상에서 여러 개의 고립된 Linux Container를 실행하기 위한 OS Level의 가상화 방법
- Docker에서는 Version 1.10까지만 지원하는 기술이다.
Docker란?
- Application을 Container로 좀 더 쉽게 사용할 수 있게 만든 Open-Source Project
- 기존 Linux Container 기술를 좀 더 활용한 기술로 어렵고 복잡하여 learning curve가 높았던 기존 기술에 비해 기능을 간편하게 하여 사용하기 쉽게하였다.
- 특징으로는,
- VM보다 가벼운 Container를 운용함에 따른 리소스 활용
- Image를 이용한 Service의 관리
- Hub를 통해 Application의 개발 및 빌드, 배포의 과정이 단순해진다.
- 위의 특징을 통해 독립성 및 확장성이 높아진다.
- 버전 관리 가능