답변:
컨테이너에 대해 알아야 할 첫 번째 사항은 다음과 같습니다.
가장 먼저 프로세스입니다.
일단 이해되면 컨테이너가 가상 머신과 어떻게 비교되고 대조되는지 이해할 수 있습니다. 컨테이너와 VM은 모두 호스트 와의 격리 를 공유 합니다. 격리 방법은 중요한 차이점입니다.
컨테이너 프로세스는 다른 프로세스와 분리하기 위해 실행되는 OS 커널 호스트에 대한 확장을 사용합니다. 다른 확장 기능은 디스크 및 리소스 격리 기능도 제공합니다. 컨테이너 는 커널과 메모리를 호스트 OS와 공유 합니다.
가상 머신은 하이퍼 바이저 를 사용하여 호스트와 VM을 분리합니다. 이것은 "게스트"(VM)에서 하드웨어로 리소스 요청을 전달하는 소프트웨어 계층입니다. 디스크 격리는 디스크 가상화에 의해 제공됩니다. VM 은 호스트와 커널을 공유 하지 않습니다 . VM 전용 메모리 공간에 자체 커널을로드합니다.
이 차이점의 한 가지 중요한 영향은 컨테이너가 호스트와 커널 호환 가능해야한다는 것입니다. 예를 들어, Linux 호스트에서 Windows Nano 서버 기반 컨테이너를 실행하거나 Windows 호스트에서 직접 Ubuntu 컨테이너를 실행할 수 없습니다. 반대로 가상 시스템은 호스트 OS에 관계없이 모든 커널을 실행할 수 있습니다. Windows 호스트에서 Linux 컨테이너를 실행할 때 Docker는 Linux VM에서 컨테이너를 실행합니다.
운영상의 차이점은 민첩성입니다. 컨테이너는 일반 프로세스만큼 빠르게 시작하고 중지합니다. VM은 "무거워서"전용 리소스가 필요하며 시작 및 종료하는 데 시간이 더 걸립니다.
컨테이너는 DevOps 운영 모델에 많은 유연성을 제공합니다.
컨테이너 라는 단어 는 최신 Linux 커널에서 사용 가능한 경량 가상화 기술을 말하며이 기술은 FreeBSD 감옥과 매우 유사합니다.
컨테이너를 사용할 수없는 오래된 Linux 커널은 동시에 프로세스를 실행할 수 있습니다. 프로세스 환경 또는 프로세스 메모리와 같이 시스템의 일부 속성은 프로세스 전용입니다. 이러한 속성을 소유 한 프로세스와 운영 체제 자체 만이 데이터에 액세스 할 수 있습니다. (일부 ps 구현 과 같이 많은 허점이 있지만 실제로는 사실입니다!) 파일 시스템 및 네트워크 인터페이스와 같은 일부 다른 속성은 프로세스간에 공유됩니다.
최신 컨테이너 가능 Linux 커널은 프로세스 또는 프로세스 그룹과 연관된 개인 데이터로 시스템의 더 많은 속성을 처리 할 수 있습니다. 결과 컨텍스트는 컨테이너 이며 파일 시스템과 운영 체제에서 초기화 한 네트워크 인터페이스를 사용하여 "초기 컨테이너"에서 프로그램을 실행하는 대신 다른 컨테이너에서 프로세스를 실행하여 다른 파일 시스템과 프로세스를 볼 수 있습니다. 다른 네트워크 인터페이스 목록. 따라서 개별 컨테이너에서 실행되는 두 프로세스는 실제로 커널 만 공유합니다. 별도의 파일 계층에서 프로세스를 실행할 수 있는 chroot 명령에 익숙 할 것입니다. 컨테이너는 아이디어를 한 단계 더 발전시킵니다.
물론 이것은 매우 대략적인 설명이지만 컨테이너가 무엇인지에 대한 아이디어를 분명히하는 데 도움이되기를 바랍니다. 자, 그들은 무엇에 좋은가요?
Linux 커널의 컨테이너 기능에 대한 대중적인 인터페이스 는 파일 시스템 ( docker images )을 나타내는 아티팩트를 생성 하고 이러한 파일 시스템에 액세스 할 수있는 컨테이너에서 프로세스를 실행 하는 데 사용할 수있는 명령 행 유틸리티 인 docker에 의해 구현됩니다 . 이 소프트웨어 제품군은 임시 가상 네트워킹 시스템을 구축하여 여러 컨테이너가 개인 네트워크에서 통신 할 수 있도록합니다.
컨테이너 기반 기술은 다음과 같은 경우에 편리합니다.
(Virtual Box와 같은 다른 가상화 기술에 익숙한 것처럼, 이러한 기술이 위의 세 가지 사항을 편리하게 처리 할 수 있다는 점에 주목할 수 있습니다. 요즘에는 가상화 기술의 범위가 매우 작기 때문에 그 인기 문제를 비교할 수 있습니다. 컴퓨터 언어의 인기가있는 특정 상황 : 아마도 각 개별 솔루션의 기술적 장점뿐만 아니라“기회”라고 레이블을 지정할 많은 요소에 따라 달라질 수 있습니다.)
일반적으로 컨테이너는 이름을 대중화 한 도커 컨테이너 와 같은 것을 말합니다.
도커 정의에서 인용합니다.
컨테이너를 사용하면 소프트웨어를 실행하는 데 필요한 모든 것이 격리 된 컨테이너로 패키지됩니다. VM과 달리 컨테이너는 전체 운영 체제를 번들로 제공하지 않으며 소프트웨어 작동에 필요한 라이브러리와 설정 만 필요합니다.
루트 이름은 호스트 시스템에서 프로세스를 분리하는 것이 목표 인 Linux 컨테이너 (lxc)이며, 첫 번째 목표는 프로세스가 호스트 시스템을 인계받지 못하도록하는 것입니다.
이제 그들은 더 넓은 범위에서 사용됩니다. 현대적인 '컨테이너'정의에서는 응용 프로그램이 이미 포함 된 런타임 용 패키지, 필요한 경우 기본 미들웨어 및 필요한 모든 라이브러리를 제공하며 호환 가능한 시스템에서 실행되는지 확인하십시오.
두 번째 장점은 환경 변수를 크게 조정하지 않고도 다른 버전에서 동일한 종속성을 가진 여러 응용 프로그램을 사용하여 올바른 응용 프로그램을로드 할 수 있다는 것입니다.
가상 박스 가상 머신 또는 AWS의 EC2 인스턴스와 같은 VM 시스템과 달리 컨테이너는 파일 시스템 수준에서만 가상이며 메모리 스택에서만 격리됩니다. 그들은 여전히 동일한 호스트를 공유하며 그 아래의 운영 체제는 CPU 틱을 중재합니다.
가상 시스템은 하드웨어 수준에서 가상이고 운영 체제를 실행하고 컨테이너는 OS 수준에서 가상이며 프로세스는 내부에서 실행됩니다.
에서 AWS의 정의 :
컨테이너는 리소스 격리 프로세스에서 응용 프로그램 및 해당 종속성을 실행할 수있는 운영 체제 가상화 방법입니다. 컨테이너를 사용하면 응용 프로그램의 코드, 구성 및 종속성을 환경 일관성, 운영 효율성, 개발자 생산성 및 버전 제어를 제공하는 사용하기 쉬운 빌딩 블록으로 쉽게 패키징 할 수 있습니다. 컨테이너는 배포 환경에 관계없이 응용 프로그램이 빠르고 안정적이며 일관되게 배포되도록합니다. 컨테이너는 또한 리소스를보다 세밀하게 제어하여 인프라의 효율성을 향상시킵니다.
컨테이너화는 특정 작업 / 환경을 수행하는 데 필요한 모든 필수 필수품을 포장하여 자급 자족하고 모든 플랫폼에서 실행할 수 있으므로 물건을 설치하고 설치할 때 많은 고통을 겪습니다.