도커 컨테이너에는 자체 커널이 있습니까?


65

도커 리포지토리의 많은 도커 이미지가 우분투베이스로 만들어진 것을 알 수 있습니다.

그게 무슨 뜻이야? 각 컨테이너는 제거 된 Linux 커널 버전을 번들로 제공합니까?

컨테이너가 자체 커널 위에 있습니까? 그러나 컨테이너가 호스트의 커널을 공유한다고 생각했습니다 (일부 경우에는 사용자 정의 Tiny Core Linux 빌드 및 다른 경우 CoreOS와 같은 boot2docker).

편집 : 질문을 조금 명확하게합니다. 예 도커는 전체 VM이 아니라 프로세스 컨테이너라는 것을 알고 있습니다. 그러나 공식 도커 허브 레지스트리 및 CentOS와 같은 다른 OS에 "Ubuntu"컨테이너가 있으므로 컨테이너에서 Ubuntu를 실행한다는 것은 무엇을 의미합니까?

답 : 아 아아아 아아아. 특정 Ubuntu 빌드에 ​​대한 apt-get 및 기타 구성 프로세스를 포함하는 Ubuntu 사용자 랜드 프로세스입니다. CentOS와 유사합니다. Docker는 단일 프로세스가 아니라 단일 항목입니다. 따라서 이러한 배포판의 진입 점은 다른 프로세스를 생성하는 일종의 초기화 프로세스입니다.


2
"우분투 사용자 랜드 프로세스"-프로세스뿐만 아니라 라이브러리도 있습니다.
— osgx

답변:


37

Docker는 호스트 OS 커널을 사용하며 컨테이너 내부에는 사용자 정의 또는 추가 커널이 없습니다. 머신에서 실행되는 모든 컨테이너는이 "호스트"커널을 공유합니다.

Wikipedia에 따르면 http://en.wikipedia.org/wiki/Docker_(software) 는

Docker는 cgroup 및 커널 네임 스페이스와 같은 Linux 커널의 리소스 격리 기능을 사용하여 단일 "인스턴스"가 단일 Linux 인스턴스 내에서 실행될 수 있도록하여 가상 머신 시작의 오버 헤드를 방지합니다.

cgroup, 네임 스페이스 및 LXC는 프로세스 그룹을 분리하기위한 Linux 커널의 기능입니다. 여전히 단일 커널, 단일 스케줄러 및 하나의 커널 메모리 관리자 인스턴스가 있습니다.

Boot2docker와 CoreOS는 일부 호스트 커널이 포함 된 가벼운 Linux 배포판입니다. Docker 컨테이너를로드하는 데 사용할 수 있습니다.

http://boot2docker.io/

boot2docker는 Docker 컨테이너를 실행하기 위해 특별히 만들어진 Tiny Core Linux 기반의 경량 Linux 배포판입니다. RAM에서 완전히 실행되며 무게는 ~ 27MB이고 ~ 5 초 (YMMV)로 부팅됩니다.

http://en.wikipedia.org/wiki/CoreOS

단일 제어 호스트 (CoreOS 인스턴스)는 Docker를 추가 추상화 계층으로 사용하고 Linux 커널의 기본 운영 체제 수준 가상화 기능에 대한 인터페이스 [14]를 사용하여 여러 개의 격리 된 Linux 시스템 (컨테이너)을 실행합니다. ...이 접근 방식은 Linux 커널의 cgroups 기능을 사용하여 네임 스페이스 격리 및 프로세스 모음에 대한 리소스 사용 (CPU, 메모리, 디스크 I / O 등)을 제한, 설명 및 격리하는 기능을 제공합니다.


1
이것은 질문에 대답하지 않습니다.
— EML

2
EML, 어떤 질문? 기본적으로 모든 Docker 컨테이너에는 자체 커널이 없습니다. 모든 Docker 컨테이너에는 하나의 호스트 커널 만 있습니다.
— osgx

물론 귀하의 답변은 가능한 한 괜찮지 만 OP는 FROM호스트가 이미 Ubuntu를 실행 중일 때 왜 Ubuntu 기본 이미지 를 사용해야하는지 알고 싶어했습니다 . 질문에 답하려면 기본 이미지가 무엇인지 설명해야합니다.
— EML

2
EML, 내 대답이 게시 된 후 "Clarifying"( superuser.com/posts/889472/revisions )으로 질문이 편집 되었으므로 명확하지 않은 원래 질문에 대한 답변입니다. docker의 기본 이미지 및 커널에 대해 공유 할 정보가 있으면 다른 대답을 추가하십시오.
— osgx

17

거의 모든 경우에 호스트 OS 커널이 공유됩니다. 다른 커널을 실행하려면 가상화를 사용해야합니다. 이것은 드물고 성능 저하로 인해 필요할 때만 사용됩니다.

"Docker Engine 컨테이너는 응용 프로그램과 그 종속 요소로만 구성됩니다. 호스트 운영 체제의 사용자 공간에서 격리 된 프로세스로 실행되어 다른 컨테이너와 커널을 공유하므로 VM의 리소스 격리 및 할당 이점을 누릴 수 있지만 훨씬 더 중요합니다. 휴대용이며 효율적입니다. "

작동 방식을 설명하는 데 도움이 될 수 있습니다. 여기에 이미지 설명을 입력하십시오

출처 : https://www.docker.com/whatisdocker/


4
"패키지는 다른 커널을 사용할 수 있습니다"에 대한 모든 소스 ??? Docker 자체는 여러 커널을 사용할 수 없으며 항상 단일 호스트 커널 만 있습니다. 하이퍼 바이저 (가상화)와 결합 된 경우에만 고유 한 커널 버전으로 여러 호스트를 시작하고 가상 호스트 당 하나의 Docker를 실행할 수 있습니다. 그러나 모든 호스트에 대해 호스트 및 도킹 된 컨테이너에 대해 하나의 커널 만있을 것입니다)
— osgx

2
패키지 란 무엇입니까? Docker 컨테이너에는 커널이 없습니다. 호스트에서 사용되는 커널에서 방금 설치하고 시작했습니다. 따라서 그림과 같이 하나의 Docker = 하나의 서버 = 하나의 커널입니다. 단일 Docker 엔진으로 두 개의 커널을 사용할 수있는 방법은 없습니다. 이 엔진 내부의 모든 컨테이너는 동일한 커널을 사용합니다. 정답은 "아니요, Docker 컨테이너는 Docker Engine의 단일 인스턴스 내에서 다른 커널을 사용할 수 없습니다"
— osgx

1
각 도커 컨테이너는 소프트웨어에 필요한 커널을로드 할 수있는 가상화 소프트웨어를 포함하여 원하는 코드를 실행할 수 있습니다. 원하는 경우 컨테이너에서 Windows를 실행할 수 있습니다.
— JeremiahBarrar

1
JeremiahBarrar, 알겠습니다. 설명해 주셔서 감사합니다. Docker 컨테이너 내부에서 가상화 소프트웨어를 실행하고 문서화되었으며 Docker에서 지원합니까? Docker (소프트웨어 qemu, qemu + kvm, xen 등)에서 어떤 종류의 가상화가 작동합니까?
— osgx

2
첫 번째 문장은 오해의 소지가 있습니다. 컨테이너 내부에서 VM을 사용하면 Docker를 사용하지 않아도됩니다.
— user2707671
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.