chroot
- chroot [옵션] NEWROOT [커맨드]
- chroot myroot /bin/sh
- 커맨드를 지정하지 않으면 $SHELL이 기본값
chroot
[~]# cd /tmp
#테스트 폴더만들기
[tmp]# mkdir newroot
[tmp]# [tmp]# mkdir -p newroot/bin
[tmp]# mkdir -p newroot/usr/bin
[tmp]# [tmp]# mkdir -p newroot/lib64
#필요한 파일 복사
[tmp]# which bash
[tmp]# cp /bin/bash newroot/bin/
[tmp]# which ls
[tmp]# cp /usr/bin/ls newroot/bin/usr/bin/
# 필요한 라이브러리 확인 후 복사
[tmp]# ldd /bin/bash
linux-vdso.so.1 (0x00007ffe6c76f000)
libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007fbe1ea31000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbe1e827000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbe1ebc6000)
[tmp]# ldd /usr/bin/ls
linux-vdso.so.1 (0x00007ffed1136000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007efdc3451000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007efdc3447000)
libc.so.6 => /lib64/libc.so.6 (0x00007efdc323d000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007efdc31a6000)
/lib64/ld-linux-x86-64.so.2 (0x00007efdc34ae000)
[tmp]# cp /lib64{libselinux.so.1,libcap.so.2,libc.so.6,libpcre2-8.so.0,ld-linux-x86-64.so.2,libtinfo.so.6}\
newroot/lib64
# 새로운 루트로 들어가보기
[tmp]# chroot newroot /bin/bash
#새로운 루트에서 ls 실행
bash-5.1# ls
bin lib64 usr
bash-5.1#
이처럼 필요한거 일일이 복사하여 만들면 되지만 너무 많은 시간과 노력이 필요
누군가가 미리 필요한 모든 것을 모아둔 "그것"을 가져다 쓰면 정말 편하겠죠? 미리 모아둔 "그것"이 바로 "이미지(image)"입니다.
출처: https://tech.kakaoenterprise.com/154 [카카오엔터프라이즈 기술블로그 Tech&(테크앤):티스토리]
이미지로 chroot 해보기
docker export $(docker create nginx:latest) | tar -C nginx-root -xvf -
동작 과정
- Docker 컨테이너를 생성 (docker create)하고 ID를 반환합니다.
- 해당 컨테이너의 파일 시스템을 docker export로 추출합니다.
- 추출된 파일 시스템 데이터를 tar 명령을 사용해 지정된 디렉토리 (nginx-root)에 압축 해제합니다.
- docker create nginx:latest
- nginx:latest 이미지를 기반으로 컨테이너를 생성합니다.
- 이 명령은 컨테이너를 생성하지만 실행하지 않습니다.
- docker export $(...)
- | tar -C nginx-root -xvf -
- docker export로 출력된 데이터를 tar 명령으로 전달합니다.
- -C nginx-root: 압축을 풀 위치를 지정합니다 (nginx-root 디렉토리).
- -xvf: 압축 해제 옵션으로, 파일 내용을 자세히 출력하며 해제합니다.
nginx 실행해보기
탈옥문제
https://speakerdeck.com/kakao/ige-dwaeyo-dokeo-eobsi-keonteineo-mandeulgi?slide=43
이게 돼요? 도커 없이 컨테이너 만들기
#Container #Cloud #Backend #Linux #Docker 카카오엔터프라이즈에서는 뉴크루와 클라우드에 관심이 있는 개발자 크루를 대상으로 컨테이너 교육을 진행하고 있습니다. 본 핸즈온은 컨테이너 내부를 이해
speakerdeck.com
https://tech.kakaoenterprise.com/150
서비스 개발자를 위한 컨테이너 뽀개기 (a.k.a 컨테이너 인터널)
시작하며 안녕하세요. 카카오엔터프라이즈에서 검색 서비스를 개발하고 있는 검색클라우드기술셀의 Sam(김삼영)입니다. 저는 앞으로 ‘컨테이너 인터널’이라는 주제로 글을 연재할 예정입니
tech.kakaoenterprise.com
https://tech.kakaoenterprise.com/171
[컨테이너 인터널 #2] 컨테이너 파일시스템
시작하며 안녕하세요. 카카오엔터프라이즈에서 검색서비스를 개발하고 있는 검색클라우드기술파트의 Sam(김삼영)입니다. [컨테이너 인터널 #1] 컨테이너 톺아보기에서 예고해 드린 대로 이번 포
tech.kakaoenterprise.com
https://tech.kakaoenterprise.com/154
[컨테이너 인터널 #1] 컨테이너 톺아보기
시작하며 안녕하세요. 카카오엔터프라이즈에서 검색 서비스를 개발하고 있는 검색클라우드기술파트의 Sam(김삼영)입니다. 지난 글 서비스 개발자를 위한 컨테이너 뽀개기 (a.k.a 컨테이너 인터널
tech.kakaoenterprise.com