리눅스 컨테이너

시스템의 나머지 부분과 격리된 프로세스 세트이다.개발단계부터 테스트, 프로덕션까지 이식성과 일관성을 유지할 수가 있다. 따라서 더 빠른 배포가 가능하며 대중성과 편의성에 있어 IT보안의 중요한 부분이다

사용 이유

애플리케이션을 개발하고 있을 때 본인의 개발환경, 동료의 개발환경이 다를 수 있다. 그리고 회사의 자체 설정 및 지원 파일을과 여러 의존성을 구성하고 있다. 이 때 필요한 서버 환경을 재구축하는 것을 부가적인 작업없이 가능한 로컬에서 이러한 환경을 에뮬레이션을 하려고 한다. 이러한 애플리케이션이 품질 검사를 통과하고 큰 수정없이 애플리케이션을 배포하는 방법이 바로 컨테이너를 사용하는 것이다.

애플리케이션을 실행하는데 필요한 라이브러리, 종속 요소들을 사용하는데 문제없이 프로덕션을 진행할 수 있다. 이러한 컨테이너 이미지 컨텐츠는 새로운 운영체제를 설치하는 것 보다 훨씬 간편하다.

기존 서버 운영에서는 애플리케이션을 실행하기 위해 서버를 지속관리 해야했지만 컨테이너는 독립 환경에서 관리되기 때문에 서버를 관리할 필요가 없다는 장점이 있다.

가상화와 차이점

가상화는 단일 하드웨어에 여러 OS를 실행할 수 있도록하는 것이다. 하지만 리눅스 컨테이너는 동일한 운영체제에서 애플리케이션을 격리시킨다. 가상화의 경우는 여러 운영체제를 동시에 실행하는 반면 컨테이너는 os의 커널을 공유하지만 네임스페이스, 컨트롤 그룹, 루트 디렉토리 등의 격리되어 실행이 가능하다. 이러한 기술로 호스트 머신에게는 프로세스로 인식되지만 컨테이너 관점에서는 독립된 가상 머신처럼 보이게 된다. 리눅스 컨테이너는 운영 체제에서 기본으로 실행되고 모든 컨테이너 전체에서 운영 체제를 공유해 애플리케이션을 가볍고 빠르게 유지할 수 있다.

리눅스 컨테이너 이미지는 이식성과 버전관리 기능을 제공하여 개발자의 컴퓨터 부터 프로덕션까지 수행할 수 있게 한다. 가상 머신보다 리소스를 적게 사용하고 표준 인터페이스를 사용하고 대규모 애플리케이션(여러 컨테이너)의 일부로 애플리케이션을 더 쉽게 관리할 수 있다.

특징

  • OS 수준의 가상화: 운영체제 수준의 가상화 기술, 별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해 컨테이너를 실행, 게스느 OS가 필요 없음

  • 빠른 속도와 효율성: 하드웨어 에뮬레이션이 없기 때문에 컨테이너가 아주 빠르게 실행됨. 하나의 머신에서 프로세스만큼 많이 실행하는 것이 가능
  • 높은 이식성: 호스트에서 실행하는 것이 아닌 독자적 실행환경을 가지고있음. 이 환경은 파일들로 구성되며, 이미지 형식으로 공유될 수 있다.
  • 비상태성: 컨테이너 실행환경은 독립적이어서 다른 컨테이너에게 영향을 주지 않는다. 도커와 같이 이미지 기반으로 컨테이너를 실행하는 경우 특정 실행 환경을 쉽게 재사용할 수 있다.

컨테이너 종류

  • 시스템 컨테이너

    운영체제 위에 하드웨어 가상화 없이 운영체제를 실행한다. 다수의 프로세스가 같은 환경을 공유하는 것을 목표로 한다.

    LXC, LXD

  • 애플리케이션 컨테이너

    하나의 애플리케이션을 실행하는 것을 목표로 한다. 독립적인 환경을 가지지만 단일 프로세스만 실행한다. 확장이 쉽고 관리요소가 거의 없다.

    도커