Docker

[Docker] 컨테이너란? (What is Container)

nang. 2020. 3. 22. 23:10
반응형
SMALL

What is Container

휴대성을 극대화하는 한편, 소프트웨어를 실행하기 위해 필요로하는 파일, 변수, 라이브러리 등을 애플리케이션에 제공하는 경량의 런타임 환경

어플리케이션 구동을 위한 _가상 개발 환경_을 만든 것

즉, 라이브러리, 미들웨어 등을 패키징한 것이 담긴 것(박스)

참고블로그

  • 런타임 : 컴퓨터 프로그램이 실행되고 있는 동안의 동작

  • 물류에서 사용되는 컨테이너가 규격화를 거쳐 장거리 화물을 대량으로 실어 나를 수 있게 된 것과 마찬가지로 컨테이너는 소프트웨어 배포 큰 힘이 되었다!

  • 개발자는 하나의 컨테이너를 생성하여 소프트웨어가 물리환경과 가상환경에서 모두 호환이 가능하게 할 수 있다.

  • 컨테이너는 완전히 격리된 구조로 제작되어서 독립적 실행이 가능하다.

  • 따라서 버전 충돌이 발생하지 않는다.

  • 별도의 운영체제 설치 하지 않아 모니터링이 수월하다.

  • 호스트 운영체제의 모든 리소스를 사용하도록 설정도 가능하다.

  • 호스트 운영체제가 하나의 컨테이너 파일을 관리하는 것이다.

    • 따라서 컨테이너가 전체 운영체제를 포함하고 있는 것이 아니기 때문에 최소한의 컴퓨팅 리소스만 필요로 하며 빠르고 쉽게 설치가 가능하다.
    • 이런 효율성 덕분에 클러스터에 구축이 가능하며 개별 컨테이너들이 복잡한 애플리케이션의 단일 구성 요소를 캡슐화 한다.
  • 컨테이너 자체를 컨테이너 내에서 이미지화하여 배포하거나 생성하는 것도 가능하다.

  • 클라우드 연계 시 무한으로 확장 가능한 플랫폼 아키텍쳐를 구성할 수 있다.

  • 기존 VM의 경우 컴퓨팅 인프라의 가상화를 지원하는 반면 컨테이너는 소프트웨어 애플리케이션의 가상화를 지원한다.

    • 애플리케이션의 구동 환경을 가상화하는 논리 패키징 방식을 제공하는 것이다.
    • 즉, 각각의 앱이 별도의 운영체제에서 구동되는 것이 아니라 컨테이너 런타임 위에서 가동되기 때문에 환경의 영향을 덜 받게 된다는 것이다.
  • 개발자들은 각기 다른 컨테이너에 애플리케이션 구성요소를 분리함으로써 전체 애플리케이션에 대한 재작업 없이 개별 구성 요소들을 업데이트 할 수 있다.


  • 예를 들어보자

A라는 개발자가 모바일 어플을 만드는데 개발에 최적화된 개발 서버를 따로 두고 개발을 진행했다.

완성을 한 뒤에 테스트 서버에서 따로 어플을 구동시켜서 테스트해보려는데 에러 천지이다.

테스트 서버에서 나는 에러를 수정하여서 다시 개발 서버에서 추가적으로 기능을 더 개발하려고 구동시키니 원래는 잘 됐던게 이번에 또 에러 천지이다.

이런 현상은 대부분 OS의 종류와 버전을 비롯하여 서버 환경의 차이가 존재하기 때문이다.

VM을 사용하는 경우 이러한 현상이 비일비재 하다.

개발에 사용한 어플 관련 라이브러리나 종속 항목 등이 하이퍼바이저+게스트 OS에 하나하나 설치되어 있을 것이다.


  • 하이퍼바이저 사용에 비해 컨테이너는 훨씬 가벼운 환경을 제공한다.
  • 예를 들어보자

위의 예에서 같은 상황인 개발자의 경우 자신이 개발한 어플 관련 라이브러리, 종속 항목 등을 패키지로 묶어서 소프트웨어 구동 환경을 위한 격리된 환경에 별도로 배당을 한다.

즉, 하이퍼바이저+게스트 OS 설치없이 유사한 역할을 해주는 것이 컨테이너이다.

패키지로 묶은 것이 컨테이너 위에서 구동되는 형태인 것이다.


  • 이런 형태를 사용하면 개발자와 운영자 입장에서 훨씬 작은 단위로 업무를 수행하게 된다.

이전에는 각각의 어플마다 게스트 OS가 필요하고 그 가상머신 위에서 올린 환경에서의 구동이 필요했지만 이제는 그냥 호스트OS의 커널에서 직접 구동하는 것이 가능하다는 것이다.

게스트OS를 또 부팅하지 않기 때문에 속도 측면에서 이점이 크고 해당 어플 시스템에 필요한만큼만 사용하기 때문에 메모리를 적게 사용한다.

반응형
LIST