docker에서 chroot는 Unix 및 Linux 시스템의 작업으로, 실행 중인 소프트웨어 프로세스와 해당 하위 프로세스의 루트 디렉터리를 변경하여 프로그램이 디렉터리에 액세스할 수 없도록 합니다. 디렉토리 이외의 것.
이 튜토리얼의 운영 환경: linux7.3 시스템, docker-1.13.1 버전, Dell G3 컴퓨터.
chroot
컨테이너 기술은 1979년 chroot가 처음 등장한 이후 등장했습니다.
Wikipedia는 chroot를 다음과 같이 정의합니다.
는 Unix 및 Linux 시스템에서 실행 중인 소프트웨어 프로세스와 해당 하위 프로세스의 명백한 루트 디렉터리를 변경하는 작업입니다. 이 환경에서 실행되고 chroot를 통해 루트 디렉터리를 설정하는 프로그램은 지정된 루트 디렉터리 외부의 파일에 액세스할 수 없고 읽을 수 없으며 해당 내용을 변경할 수 없습니다.
일반인의 관점에서 보면 chroot는 프로그램이 디렉토리 외부의 다른 디렉토리에 액세스할 수 없도록 프로세스의 루트 디렉토리를 변경할 수 있습니다. 이는 컨테이너에서 수행하는 작업과 매우 유사합니다. 아래에서는 chroot를 시연하기 위해 예제를 사용합니다. ㅋㅋㅋ (docker create docker101tutorial) -o docker101tutorial.tar
#docker101tutorial이라는 컨테이너의 파일 시스템을 docker101tutorial.tar 아카이브 파일로 docker101tutorial.tar에 내보내고 저장합니다
#Created some과 같이 간단히 이해할 수도 있습니다. 디렉토리에 일부 바이너리 파일을 배치하고 rootfs
4), tar -xf docker101tutorial.tar
#docker101tutorial.tar 파일의 내용 추출
5), ls
#현재 rootfs 디렉토리의 파일 내용 보기
6), chroot /Users/xiaoqin.wu/rootfs /bin/sh
#sh 프로세스를 시작하고 /Users/xiaoqin.wu/rootfs를 sh 프로세스의 루트 디렉터리로 사용합니다
비교 위 그림에서 /Users/xiaoqin.wu/rootfs 디렉터리의 파일 내용을 보기 위한 5번 명령: ls의 결과는 sh 프로세스에서 현재 프로세스를 보기 위해 7번 명령: ls를 사용한 결과와 일치합니다. 이 시점에서 chroot를 사용하면 현재 프로세스가 실현되고 호스트 격리와 디렉터리 격리 컨테이너가 완료되었지만 아직 컨테이너라고 부를 수는 없음을 보여줍니다.
이유는 다음과 같습니다.
라우팅 정보를 보려면 8번 명령어: netstat -nr을 사용하세요
결과를 보면 네트워크 정보가 분리되어 있지 않은 것으로 나타났습니다. 실제로는 프로세스와 기타 정보가 분리되어 있습니다. 완전한 컨테이너를 구현하려면 세 가지 다른 Linux 기술, 즉
NamespaceCgroupUnited File System권장 학습: "docker 비디오 튜토리얼"
이 필요합니다.위 내용은 chroot는 docker에서 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!