나는 최근에 docker를 배우기 시작했고 대부분의 무거운 작업은 네임 스페이스와 cgroup을 사용하는 리눅스 커널에 의해 수행되는 것 같습니다.
내가 헷갈리는 몇 가지 사항은 다음과 같습니다.
네임 스페이스와 cgroup의 차이점은 무엇입니까? 그들이 다루는 다른 사용 사례는 무엇입니까?
인기를 얻기 위해 이것 위에도 커가 구현 된 것은 무엇입니까?
이러한 기능의 내부 및 구현 방법을 알고 싶습니다.
나는 최근에 docker를 배우기 시작했고 대부분의 무거운 작업은 네임 스페이스와 cgroup을 사용하는 리눅스 커널에 의해 수행되는 것 같습니다.
내가 헷갈리는 몇 가지 사항은 다음과 같습니다.
네임 스페이스와 cgroup의 차이점은 무엇입니까? 그들이 다루는 다른 사용 사례는 무엇입니까?
인기를 얻기 위해 이것 위에도 커가 구현 된 것은 무엇입니까?
이러한 기능의 내부 및 구현 방법을 알고 싶습니다.
답변:
이 두 개념에 대한 적절한 링크는 PR 14307 에서 수정되었습니다 .
내부적으로 Docker는 다음 구성 요소를 기반으로합니다.
Linux 커널 의 cgroup 및
namespaces
기능
와:
요컨대 :
Jérôme Petazzoni의 " Anatomy of a Container : Namespaces, cgroups & Some Filesystem Magic " 에서 자세한 내용을 참조하십시오 .
Cgroup에는 리소스 측정 및 제한이 포함됩니다.
네임 스페이스는 프로세스에 자체 시스템보기를 제공합니다.
여러 네임 스페이스 :
chroot
일부 공간을 기반으로? chroot
일부 네임 스페이스로 대체 할 수 있습니까 ?
chroot
일부 네임 스페이스로 대체 할 수 있습니까 ?
pivot_root
? ( unix.stackexchange.com/a/456777/7490 )도 참조 github.com/vincentbernat/jchroot
cgroups 는 프로세스 또는 프로세스 집합이 CPU, 메모리, 네트워크 I / O 또는 파일 시스템에 대한 액세스 등 이러한 리소스를 사용할 수있는 리소스를 제한하는 반면 네임 스페이스는 프로세스 그룹의 가시성을 나머지 시스템으로 제한합니다.
자세한 내용은 Linux 커널 Cgroup 및 네임 스페이스가 현대 컨테이너를 가능하게하는 방법을 참조하십시오.
Cgroups (control groups)는 자원 관리를합니다.
컨테이너에 제공 할 호스트 머신 리소스의 양을 결정합니다.
예 :-다음과 같은 서비스를 만들기 위해 docker-compose yaml 파일에 리소스를 정의합니다.
자원: 제한: cpus : "0.1"(100 밀리 커) 메모리 : 50M
여기에서이 예에서는 cgroup에게 이러한 리소스를 특정 컨테이너에 할당하도록 명시 적으로 요청합니다.
네임 스페이스 : 프로세스 격리, 컨테이너의 완전한 격리, 별도의 파일 시스템을 제공합니다.