dind의 기본 메커니즘(docker의 docker)

dind의 기본 메커니즘(docker의 docker)

나는 DinD가 단지 호스트 도커 데몬을 사용하기 위한 속임수일 뿐이라는 인상을 받았지만, 최근에 이것이 사실이 아니며 실제로는 중첩된 컨테이너화라는 내용을 읽었습니다.

저는 그 메커니즘, 즉 Linux가 네임스페이스, cgroup 볼륨 및 네트워킹 측면에서 계층 구조를 관리하는 방법에 관심이 있습니다. 어떤 시스템 호출도 관련되어 있습니다.

미리 감사드립니다 :)

답변1

네임스페이스와 는 cgroup본질적으로 계층적입니다.

네임스페이스: 각 네임스페이스는 해당 유형의 루트 네임스페이스이거나 상위 네임스페이스를 갖습니다. 프로세스는 시스템 호출 CLONE_NEW*의 플래그를 사용 clone하거나 시스템 호출을 사용하여 unshare현재 네임스페이스의 자식이 될 새 네임스페이스를 생성 할 수 있습니다. unshare이 프로그램을 사용하여 시스템 호출을 사용할 수 있습니다 unshare. 매우 간단합니다.

cgroupcgroups: 새 네임스페이스가 생성되지 않더라도 각 네임스페이스는 루트이거나 상위 네임스페이스를 갖기 cgroup때문에 자체적으로 계층적입니다 . 모든 부모의 제한 사항은 어린이에게 적용됩니다 . 하위 프로세스 아래의 모든 프로세스도 상위 프로세스에 속합니다.cgroupcgroupcgroupcgroupcgroupcgroupcgroup

파일 시스템이 계층적이며 하나의 파일 시스템이 다른 파일 시스템의 디렉터리 내에 마운트될 수 있기 때문에 중첩된 볼륨이 가능합니다. 새 네임스페이스를 사용하면 호스트 파일 시스템이 게스트로부터 숨겨집니다 mount. 네임스페이스가 중첩될 수 있으므로 중첩될 수 있습니다.

net네트워킹은 중첩될 수도 있는 네임스페이스에 의해 처리됩니다 .

이러한 것 중 다수에는 루트 네임스페이스의 기능이 필요하며, 이는 플래그를 사용하여 컨테이너를 실행하여 --privileged달성 할 수 있습니다.

관련 정보