ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • chroot 명령어로 도커 컨테이너와 유사한 환경을 만들어보는 실습
    Cloud/Container 2023. 2. 7. 22:49

    chroot 명령을 사용하여 Docker 컨테이너와 유사한 환경을 만들어보면 컨테이너가 작동하는 원리를 기본적인 수준에서 쉽게 이해할 수 있습니다. 이 핸즈온을 통해 다음 개념을 배울 수 있습니다:

    파일 시스템 네임스페이스

    chroot 명령을 사용하면 파일 시스템의 루트 디렉터리를 변경하고 별도의 네임스페이스를 만들 수 있습니다. 이는 컨테이너가 호스트 시스템에서 파일 시스템을 격리하는 방법과 유사합니다.

    프로세스 격리

    루트 환경 내에서 프로세스를 실행한다는 것은 호스트 시스템에서 프로세스가 격리된다는 것을 의미합니다. 이는 컨테이너가 격리된 프로세스를 실행하는 방식과 유사하며, 독립된 환경을 만들 수 있습니다.

    리소스 제어

    chroot 명령을 사용하여 디스크 공간, 네트워크 연결, CPU 사용량 등 격리된 환경이 액세스할 수 있는 리소스를 제한할 수 있습니다. 이는 컨테이너가 리소스 사용을 제어하고 호스트 시스템에 미치는 영향을 제한하는 방식과 유사합니다.

    보안

    루트 환경 내에서 애플리케이션을 실행하면 호스트 시스템으로부터 애플리케이션을 격리하여 보안을 강화할 수 있습니다. 이는 악성 소프트웨어가 호스트에 영향을 미치는 것을 방지하고 애플리케이션을 실행할 수 있는 안전한 환경을 제공하는 데 도움이 될 수 있습니다.

    전반적으로, chroot 명령을 사용하여 Docker 컨테이너와 유사한 환경을 만드는 연습은 컨테이너의 개념과 아키텍처, 그리고 클라우드 네이티브 환경에서 애플리케이션을 격리하고 보호하는 데 컨테이너를 사용하는 방법을 직접 경험해 볼 수 있는 좋은 방법입니다.

     

    다음은 chroot 명령을 사용하여 Docker 컨테이너와 유사한 환경을 만들어 보는 실습입니다.

    1. 환경을 준비합니다.

    실습은 Ubuntu 20.04 LTS 환경에서 진행했습니다.
    다음 명령을 실행하여 실습에 필요한 패키지를 설치합니다.

    (debootstrap 패키지는 최소한의 데비안 기반 시스템을 만드는 데 사용되는 패키지입니다. 이를 통해 테스트용 사용자 지정 Debian 기반 환경을 쉽게 만들 수 있습니다.)

    sudo apt install debootstrap debian-archive-keyring tree

    컨테이너의 루트 파일 시스템으로 사용할 디렉터리를 만들고 빈 디렉토리 내용을 확인합니다.

    sudo mkdir /var/chroot
    ls -al /var/chroot

    새로 생성된 디렉터리에 기본 데비안 시스템을 설치하려면 디부트스트랩을 사용하세요:

    # 기본값으로 완성
    sudo debootstrap --arch=amd64 focal /var/chroot http://mirror.kakao.com/ubuntu/

    *혹시 Error executing gpgv to check Release signature 에러가 발생한다면 --no-check-gpg 옵션을 주고 실행시킵니다.

    /var/chroot 디렉토리 안쪽 파일을 확인해봅니다.

    tree -L 1 /var/chroot/
    
    /var/chroot/
    ├── bin -> usr/bin
    ├── boot
    ├── dev
    ├── etc
    ├── home
    ├── lib -> usr/lib
    ├── lib32 -> usr/lib32
    ├── lib64 -> usr/lib64
    ├── libx32 -> usr/libx32
    ├── media
    ├── mnt
    ├── opt
    ├── proc
    ├── root
    ├── run
    ├── sbin -> usr/sbin
    ├── srv
    ├── sys
    ├── tmp
    ├── usr
    └── var

    마치 우분투의 루트 파일시스템과 같은 디렉토리와 파일들이 생겼다면 성공입니다.

     

    2. chroot 환경으로 들어가서 파일 시스템 구조를 확인하고 테스트 파일 하나를 생성해봅니다.
    chroot 환경 내에서 필요한 파일 시스템을 마운트합니다.

    sudo mount --bind /proc /var/chroot/proc
    sudo mount --bind /sys /var/chroot/sys
    sudo mount --bind /dev /var/chroot/dev
    sudo mount --bind /dev/pts /var/chroot/dev/pts

    chroot 환경으로 들어가 컨테이너(격리된 프로세스)를 실행합니다.

    sudo chroot /var/chroot /bin/bash

    chroot 환경안에서 a.txt 라는 파일을 만들고 생성을 확인합니다.

    echo "hi" >> a.txt
    ls -al

     

    3. chroot 환경을 종료하고 생성한 파일을 확인한 뒤에 실습 환경을 정리합니다.

    chroot 환경을 종료하고 나옵니다.

    exit

    원래 서버 환경에서 /var/chroot 디렉토리 안쪽에 a.txt 파일이 생성된 것을 확인합니다.

    ls -al /var/chroot
    cat /var/chroot/a.txt

     

    실습이 모두 끝났으면 실습 환경을 정리합니다.

    sudo umount /var/chroot/dev/pts
    sudo umount /var/chroot/dev
    sudo umount /var/chroot/sys
    sudo umount /var/chroot/proc
    
    rm -rf /var/chroot
     

    위 실습은 chroot 명령을 사용하여 기본 컨테이너와 유사한 환경을 만듭니다. 하지만 이것은 단순화된 예이며 실제 Docker 컨테이너와 동일한 수준의 격리 및 보안을 제공하지 않는다는 점에 유의해야 합니다.

Designed by Tistory.