현학적이라는 건 알지만 달려가서 man namespaces
이해해
네임스페이스는 전역 시스템 리소스를 추상화하여 래핑하므로 네임스페이스 내의 프로세스는 자체적으로 격리된 전역 리소스 인스턴스를 갖고 있는 것처럼 보입니다. 전역 리소스에 대한 변경 사항은 네임스페이스의 구성원인 다른 프로세스에 표시되지만 다른 프로세스에는 표시되지 않습니다.네임스페이스의 용도 중 하나는 컨테이너를 구현하는 것입니다.
"구현하라"고 했을 때컨테이너", 네임스페이스 격리 외에 내가 수행 중인 작업을 "컨테이너"라고 불러야 하는 것은 무엇입니까? 또는 더 구체적으로 unshare
다른 사용자 네임스페이스에서 시작하는 프로그램을 실행하면 "컨테이너"가 됩니까?
답변1
커널은 컨테이너를 정의하지 않습니다.systemd-spawn으로 생성된 "경량 네임스페이스 컨테이너"란 무엇입니까?. 일반적으로 이해되는 컨테이너는 격리(네임스페이스 사용) 및 리소스 제어(cgroup 사용)는 물론 seccomp 필터와 같은 추가 수준의 보호 기능도 제공합니다. 이는 여러 개념을 결합하며 커널에서 직접 제공하는 일류 개념의 인스턴스가 아닙니다.
unshare
네임스페이스 측면을 처리하려면 나머지 부분을 추가해야 합니다(따라서 컨테이너 런타임 구현).
답변2
리눅스 재단
Linux Foundation에서 이에 대한 실제 정의를 찾아보면 "컨테이너"는 격리 수준이나 권한 제어로 정의되지 않는 것 같습니다."빌딩 모듈"——하지만 반대로,
- 애플리케이션, 해당 종속성, 사용자 공간 라이브러리를 포함하는 이미지에서 인스턴스화합니다.
- 호스트 커널에서 실행
- 제한적이고 외부 리소스로부터 격리됨
그래서 여기서 진짜 질문은 쉘 스크립트가 공유 해제되는지 여부입니다 unshare
.