도커 컨테이너란 무엇이며 왜 컨테이너라 부를까?

작성자 : 남윤서

1장 컨테이너란 무엇이며 왜 컨테이너인가

컨테이너

응용프로그램의 종속성과 함께 응용프로그램 자체를 캡슐화한 것 운영체제의 격리된 인스턴스 형태로 해당 환경에서 응용프로그램을 실행

  • 장점
    1. 호스트 os에 있는 자원 공유하여 자원을 효율적으로 사용할 수 있게 한다
    2. 운영 환경의 변경으로 인해 모든 버그들을 없앨 수 있는 이식성 제공
    3. 매우 가벼움
    4. 최종 사용자와 개발자가 클라우드에도 배포할 수 있음
  • VM과의 차이 VM은 외부환경을 완전하게 애뮬레이트하는 것에 목적 오랜 시간 축적된 기술 -> 하이퍼바이저의 격리 수준이 추가 컨테이너는 응용프로그램의 이식성과 독립성에 목적 새로운 기술

  • 컨테이너와 VM

1

세 개의 응용프로그램이 호스트에 있는 세 개의 VM에서 실행되고 있는 구조 하이퍼 바이저는 VM 생성, 실생, 시스템호출을 인터프리팅, OS와 hw 접근 제어 각각의 VM들은 OS 전체 실행할 응용프로그램과 지원되는 모든 라이브러리 필요

1

호스트와 같은 커널에서 실행 컨테이너 엔진은 VM의 하이퍼바이저와 비슷한 방식으로 컨테이너의 시작과 중지 책임 그러나 컨테이너 내부에서 실행되는 프로세스는 호스트에 있는 네이티브 프로세스들과 동일하며 하이퍼바이저 실행과 관련된 오버헤드 발생하지 않음

-> 장점은 모두 활용하는 VM 안에서 컨테이너 운영하는 하이브리드 시스템 찾는다

도커와 컨테이너

도커엔진 컨테이너 생성하고 실행하는 역할 컨테이너를 운영하기 위한 빠르고 간편한 인터페이스 제공

  • 도커 허브 컨테이너 배포를 위한 클라우드 서비스 제공 다운로드할 수 있는 막대한 양의 컨테이너 이미지 제공 새로 접하는 사용자들이 쉽게 사용하도록 제공 작업해둔 내용 그대로 사용이 가능

도커의 성장

도커엔진을 오픈 소스화함으로써 대형 커뮤니티로 성장 버그 수정과 기술 향상 등 많은 사람의 도움을 받으며 사실상의 표준으로 자리 잡게 됨

  • 컨테이너 개발자에게 컨테이너를 효율적으로 사용할 수 있게 하는 도구 처음 제공 이동성과 독립성 보장 등 컨테이너에서 실행되는 코드에 대해서 신경 쓸 필요 없이 컨테이너를 호스팅하고 운영하는 것에만 집중 가능

  • 선적의 비유 상품 배송 시 다양한 운송수단 거쳐야 함 통합된 컨테이너 개발됨으로써 혁신적으로 발전 컨테이너는 표준화된 크기, 수작업 최소화, 모든 운송 기계들이 컨테이너 처리 -> 생산자는 컨테이너 내용물에만 신경을 쓰고 운송업계는 컨테이너 자체에 대한 이동과 보관에만 집중이 가능 도커 컨테이너는 소프트웨어 응용프로그램의 이동, 단순화 개발자는 응용프로그램 개발에만 집중 시스템 운영자는 컨테이너를 운영하는 자원 할당, 컨테이너 시작과 종료, 서버 간의 마이그레이션등 주요 이슈에만 집중

도커의 역사

2008년 솔로몬 하익스는 언어의 중립적인 Platform-as-a-Service를 제공하는 닷클라우드사 설립 2010년 Y Combinator 촉진 프로그램에 참여 2013년 도커를 오픈소스화 도커의 초기 버전 Union 파일시스템과 짝지어진 LXC를 감싸는 래퍼일 뿐이었음 2014년에 도커 1.0이 발표되고 상용화 가능하다고 선언 다양한 기업에서 운영계로 사용 도커허브 출시, 도커 스웜을 발표 이를 통해 토커 엔진만 제공하는데 그치지 않고 컨테이너 운영을 위한 통합 솔루션 제공하는데 목적으로 두고 있음을 보여줌 2015년 컨테이너 포맷과 런타임의 일반 표준을 개발하기 위한 Open Container Initiative 조직 FreeBSD에서도 도커사용가능 도커와 마이크로소프트는 윈도우 서버용 도커엔진 tech preview 버전 공개 도커 1.8 발표 콘텐츠 트러스트(도커 이미지의 무결성과 게시자를 확인 가능) 기능 출시

플러그인과 플러밍

도커사가 네트워크, 저장소, 기능 조정과 같은 기능을 기본적으로 갖추고 있는 완벽한 플랫폼 제공할 준비를 하고 있음 도커는 기존 인프라 구성 요소들을 재사용하고 개선할 것이라는 점, 새로운 도구들이 필요하게 되면 재사용 가능한 구성요소들을 커뮤니티가 사용할 수 있도록 기여하겠다는 점 강조

64-비트 리눅스

64-비트 리눅스 배포관을 실행시킬 수 있는 컴퓨터가 필요하며 실행하게 되는 모든 컨테이너도 64-비트 리눅스 윈도우 서버 컨테이너는 윈도우 서버 호스트에서만 실행이 가능, 64-비트 리눅스 컨테이너는 64-비트 리눅스 호스트에서만 실행

  • 마이크로서비스와 모노리스

마이크로서비스는 내부적으로 컨테이너를 사용하면서 컨테이너를 강력하게 이끌어가는 견인차 소프트웨어 시스템을 개발하고 구성하는 방법 중 하나로 네트워크를 통해 통신하는 작고 독립된 구성요소들로 만들어짐 -> 전통적인 모노리틱 소프트웨어 개발 방법과는 대조적

모노리스의 크기를 키울 수 있는 방법은 규모 키우기 밖에 없음 -> 더 많은 RAM, CPU를 가지고 있는 대형 머신을 이용하여 더 많은 요청을 처리할 수 있도록 하는 방법 모노리스에서는 전체의 규모를 키울 수 없기 때문에 자원 낭비를 초래

마이크로 서비스는 여러 대의 머신을 생성하여 생성된 여러 대의 머신으로 부하를 분산시켜서 처리하는 방식인 규모 확장에 맞추어 설계 특정 서비스에서 필요한 자원들만 규모를 확장 가능 즉 시스템의 병목에만 집중하면 됨 복잡도 측면에서 많은 서비스들로 구성된 시스템에서는 각각의 구성 요소들이 상호작용한다는 점 때문에 전체적인 복잡도 증가

즉 컨테이너의 가볍고 빠르다는 특성은 마이크로서비스 아키텍처를 통하여 최소한의 자원만 사용이 가능하고 필요에 따른 변경도 재빨리 대응이 가능하여 장점이다

Categories:

docker