books/도커와 쿠버네티스

도커 없이 컨테이너 만들면서 이해해보기

study_recode 2025. 3. 5. 01:55

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 -

동작 과정

  1. Docker 컨테이너를 생성 (docker create)하고 ID를 반환합니다.
  2. 해당 컨테이너의 파일 시스템을 docker export로 추출합니다.
  3. 추출된 파일 시스템 데이터를 tar 명령을 사용해 지정된 디렉토리 (nginx-root)에 압축 해제합니다.
  1. docker create nginx:latest
    • nginx:latest 이미지를 기반으로 컨테이너를 생성합니다.
    • 이 명령은 컨테이너를 생성하지만 실행하지 않습니다.
  2. docker export $(...)
    • 생성된 컨테이너의 파일 시스템을 tar 형식으로 추출합니다.
    • docker export는 컨테이너의 파일 시스템만 저장하며, 이미지 레이어나 메타데이터는 포함되지 않습니다13.
  3. | 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

 

'books > 도커와 쿠버네티스' 카테고리의 다른 글

도커 개념  (0) 2025.03.04