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


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.