컨테이너 란?


23

컨테이너 에 대한 몇 가지 질문이 있습니다 .

내 질문 :

  • 실제로 "컨테이너"란 무엇입니까 (DevOps의 맥락에서)?
  • 왜 사용됩니까?

답변:


18

컨테이너에 대해 알아야 할 첫 번째 사항은 다음과 같습니다.

가장 먼저 프로세스입니다.

일단 이해되면 컨테이너가 가상 머신과 어떻게 비교되고 대조되는지 이해할 수 있습니다. 컨테이너와 VM은 모두 호스트 와의 격리 를 공유 합니다. 격리 방법은 중요한 차이점입니다.

컨테이너 프로세스는 다른 프로세스와 분리하기 위해 실행되는 OS 커널 호스트에 대한 확장을 사용합니다. 다른 확장 기능은 디스크 및 리소스 격리 기능도 제공합니다. 컨테이너 는 커널과 메모리를 호스트 OS와 공유 합니다.

가상 머신은 하이퍼 바이저 를 사용하여 호스트와 VM을 분리합니다. 이것은 "게스트"(VM)에서 하드웨어로 리소스 요청을 전달하는 소프트웨어 계층입니다. 디스크 격리는 디스크 가상화에 의해 제공됩니다. VM 호스트와 커널을 공유 하지 않습니다 . VM 전용 메모리 공간에 자체 커널을로드합니다.

이 차이점의 한 가지 중요한 영향은 컨테이너가 호스트와 커널 호환 가능해야한다는 것입니다. 예를 들어, Linux 호스트에서 Windows Nano 서버 기반 컨테이너를 실행하거나 Windows 호스트에서 직접 Ubuntu 컨테이너를 실행할 수 없습니다. 반대로 가상 시스템은 호스트 OS에 관계없이 모든 커널을 실행할 수 있습니다. Windows 호스트에서 Linux 컨테이너를 실행할 때 Docker는 Linux VM에서 컨테이너를 실행합니다.

운영상의 차이점은 민첩성입니다. 컨테이너는 일반 프로세스만큼 빠르게 시작하고 중지합니다. VM은 "무거워서"전용 리소스가 필요하며 시작 및 종료하는 데 시간이 더 걸립니다.

컨테이너는 DevOps 운영 모델에 많은 유연성을 제공합니다.

  • 컨테이너는 소프트웨어 구성 요소 종속성을 분리합니다. 개발자는 컨테이너를 사용하여 애플리케이션 모듈이 QA / UA / Production에서와 같이 개발 시스템에서도 제대로 작동 함을 보장 할 수 있습니다.
  • 컨테이너는 소프트웨어 정의 네트워킹을 사용하여 통신
  • 컨테이너 정의는 선언적이며 소스 제어 가능
  • 컨테이너 관리 시스템 (Kubernetes, DC / OS, Swarm)은 하드웨어 리소스 (컴퓨팅 / RAM / 스토리지) 풀을 관리하고 컨테이너를 동적으로 확장 할 수 있습니다

1
또한
vagrant

8

컨테이너 라는 단어 는 최신 Linux 커널에서 사용 가능한 경량 가상화 기술을 말하며이 기술은 FreeBSD 감옥과 매우 유사합니다.

컨테이너를 사용할 수없는 오래된 Linux 커널은 동시에 프로세스를 실행할 수 있습니다. 프로세스 환경 또는 프로세스 메모리와 같이 시스템의 일부 속성은 프로세스 전용입니다. 이러한 속성을 소유 한 프로세스와 운영 체제 자체 만이 데이터에 액세스 할 수 있습니다. (일부 ps 구현 과 같이 많은 허점이 있지만 실제로는 사실입니다!) 파일 시스템 및 네트워크 인터페이스와 같은 일부 다른 속성은 프로세스간에 공유됩니다.

최신 컨테이너 가능 Linux 커널은 프로세스 또는 프로세스 그룹과 연관된 개인 데이터로 시스템의 더 많은 속성을 처리 할 수 ​​있습니다. 결과 컨텍스트는 컨테이너 이며 파일 시스템과 운영 체제에서 초기화 한 네트워크 인터페이스를 사용하여 "초기 컨테이너"에서 프로그램을 실행하는 대신 다른 컨테이너에서 프로세스를 실행하여 다른 파일 시스템과 프로세스를 볼 수 있습니다. 다른 네트워크 인터페이스 목록. 따라서 개별 컨테이너에서 실행되는 두 프로세스는 실제로 커널 만 공유합니다. 별도의 파일 계층에서 프로세스를 실행할 수 있는 chroot 명령에 익숙 할 것입니다. 컨테이너는 아이디어를 한 단계 더 발전시킵니다.

물론 이것은 매우 대략적인 설명이지만 컨테이너가 무엇인지에 대한 아이디어를 분명히하는 데 도움이되기를 바랍니다. 자, 그들은 무엇에 좋은가요?

Linux 커널의 컨테이너 기능에 대한 대중적인 인터페이스 는 파일 시스템 ( docker images )을 나타내는 아티팩트를 생성 하고 이러한 파일 시스템에 액세스 할 수있는 컨테이너에서 프로세스를 실행 하는 데 사용할 수있는 명령 행 유틸리티 인 docker에 의해 구현됩니다 . 이 소프트웨어 제품군은 임시 가상 네트워킹 시스템을 구축하여 여러 컨테이너가 개인 네트워크에서 통신 할 수 있도록합니다.

컨테이너 기반 기술은 다음과 같은 경우에 편리합니다.

  • 확장 가능한 복잡한 배포를 설명하십시오 .
  • 응용 프로그램 개발자에게 프로덕션 환경과 매우 유사한 환경을 제공하십시오.
  • 소프트웨어 아티팩트는 일반적으로 응용 프로그램 패키지뿐만 아니라 전체 운영 체제를 설명하므로 변경 불가능한 서버 패턴을 구현하십시오.

(Virtual Box와 같은 다른 가상화 기술에 익숙한 것처럼, 이러한 기술이 위의 세 가지 사항을 편리하게 처리 할 수 ​​있다는 점에 주목할 수 있습니다. 요즘에는 가상화 기술의 범위가 매우 작기 때문에 그 인기 문제를 비교할 수 있습니다. 컴퓨터 언어의 인기가있는 특정 상황 : 아마도 각 개별 솔루션의 기술적 장점뿐만 아니라“기회”라고 레이블을 지정할 많은 요소에 따라 달라질 수 있습니다.)


1
더 이상 리눅스에 국한되지 않고, 윈도우 16은 같은 종류의 능력을 가지고있다
Tensibai


7

일반적으로 컨테이너는 이름을 대중화 한 도커 컨테이너 와 같은 것을 말합니다.

도커 정의에서 인용합니다.

컨테이너를 사용하면 소프트웨어를 실행하는 데 필요한 모든 것이 격리 된 컨테이너로 패키지됩니다. VM과 달리 컨테이너는 전체 운영 체제를 번들로 제공하지 않으며 소프트웨어 작동에 필요한 라이브러리와 설정 만 필요합니다.

루트 이름은 호스트 시스템에서 프로세스를 분리하는 것이 목표 인 Linux 컨테이너 (lxc)이며, 첫 번째 목표는 프로세스가 호스트 시스템을 인계받지 못하도록하는 것입니다.

이제 그들은 더 넓은 범위에서 사용됩니다. 현대적인 '컨테이너'정의에서는 응용 프로그램이 이미 포함 된 런타임 용 패키지, 필요한 경우 기본 미들웨어 및 필요한 모든 라이브러리를 제공하며 호환 가능한 시스템에서 실행되는지 확인하십시오.

두 번째 장점은 환경 변수를 크게 조정하지 않고도 다른 버전에서 동일한 종속성을 가진 여러 응용 프로그램을 사용하여 올바른 응용 프로그램을로드 할 수 있다는 것입니다.

가상 박스 가상 머신 또는 AWS의 EC2 인스턴스와 같은 VM 시스템과 달리 컨테이너는 파일 시스템 수준에서만 가상이며 메모리 스택에서만 격리됩니다. 그들은 여전히 ​​동일한 호스트를 공유하며 그 아래의 운영 체제는 CPU 틱을 중재합니다.

가상 시스템은 하드웨어 수준에서 가상이고 운영 체제를 실행하고 컨테이너는 OS 수준에서 가상이며 프로세스는 내부에서 실행됩니다.


1
흠, 그래서 VirtualBox 이미지와 같은 것 (또는 VirtualBox에서 호출 된 것)도 "컨테이너"로 자격이 될 수 있습니까? 아니면 이해할 수 없습니까?
Pierre.Vriens

나는 질문의 일부를 잊어 버렸고 대답을 확장하면서 차이점을 추가했습니다.
Tensibai

3

에서 AWS의 정의 :

컨테이너는 리소스 격리 프로세스에서 응용 프로그램 및 해당 종속성을 실행할 수있는 운영 체제 가상화 방법입니다. 컨테이너를 사용하면 응용 프로그램의 코드, 구성 및 종속성을 환경 일관성, 운영 효율성, 개발자 생산성 및 버전 제어를 제공하는 사용하기 쉬운 빌딩 블록으로 쉽게 패키징 할 수 있습니다. 컨테이너는 배포 환경에 관계없이 응용 프로그램이 빠르고 안정적이며 일관되게 배포되도록합니다. 컨테이너는 또한 리소스를보다 세밀하게 제어하여 인프라의 효율성을 향상시킵니다.

컨테이너화는 특정 작업 / 환경을 수행하는 데 필요한 모든 필수 필수품을 포장하여 자급 자족하고 모든 플랫폼에서 실행할 수 있으므로 물건을 설치하고 설치할 때 많은 고통을 겪습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.