나는 DinD가 단지 호스트 도커 데몬을 사용하기 위한 속임수일 뿐이라는 인상을 받았지만, 최근에 이것이 사실이 아니며 실제로는 중첩된 컨테이너화라는 내용을 읽었습니다.
저는 그 메커니즘, 즉 Linux가 네임스페이스, cgroup 볼륨 및 네트워킹 측면에서 계층 구조를 관리하는 방법에 관심이 있습니다. 어떤 시스템 호출도 관련되어 있습니다.
미리 감사드립니다 :)
답변1
네임스페이스와 는 cgroup
본질적으로 계층적입니다.
네임스페이스: 각 네임스페이스는 해당 유형의 루트 네임스페이스이거나 상위 네임스페이스를 갖습니다. 프로세스는 시스템 호출 CLONE_NEW*
의 플래그를 사용 clone
하거나 시스템 호출을 사용하여 unshare
현재 네임스페이스의 자식이 될 새 네임스페이스를 생성 할 수 있습니다. unshare
이 프로그램을 사용하여 시스템 호출을 사용할 수 있습니다 unshare
. 매우 간단합니다.
cgroup
cgroup
s: 새 네임스페이스가 생성되지 않더라도 각 네임스페이스는 루트이거나 상위 네임스페이스를 갖기 cgroup
때문에 자체적으로 계층적입니다 . 모든 부모의 제한 사항은 어린이에게 적용됩니다 . 하위 프로세스 아래의 모든 프로세스도 상위 프로세스에 속합니다.cgroup
cgroup
cgroup
cgroup
cgroup
cgroup
cgroup
파일 시스템이 계층적이며 하나의 파일 시스템이 다른 파일 시스템의 디렉터리 내에 마운트될 수 있기 때문에 중첩된 볼륨이 가능합니다. 새 네임스페이스를 사용하면 호스트 파일 시스템이 게스트로부터 숨겨집니다 mount
. 네임스페이스가 중첩될 수 있으므로 중첩될 수 있습니다.
net
네트워킹은 중첩될 수도 있는 네임스페이스에 의해 처리됩니다 .
이러한 것 중 다수에는 루트 네임스페이스의 기능이 필요하며, 이는 플래그를 사용하여 컨테이너를 실행하여 --privileged
달성 할 수 있습니다.