Docker 같은 컨테이너 기술은 사실 리눅스의 기본 기능을 잘 조합해서 만든 것입니다.
그 출발점이 바로 chroot입니다. 오늘은 Amazon Linux EC2에서 직접 chroot를 이용해 최소 컨테이너 환경을 만들어 보겠습니다.
키페어 생성
------
인스턴스 생성

보안그룹 생성

mobaxterm 사용

Change Root의 줄임말
특정 디렉토리를 루트(/)로 바꿔서 그 안에서 프로세스를 실행
즉, ls /를 입력해도 실제 호스트의 /가 아니라 chroot 디렉토리 내부를 보여줌
👉 컨테이너의 기본 아이디어인 파일시스템 격리의 시작점
Amazon Linux 2023 EC2 기준으로 진행했습니다.
# tree 유틸리티 설치 (디렉토리 구조 확인용)
sudo yum install -y tree
# 실행환경 디렉토리 생성
mkdir -p app/{bin,lib64}
# 구조 확인:
tree app
app
├── bin
└── lib64
# bash 복사
cp /bin/bash app/bin/
bash가 실행되려면 여러 라이브러리가 필요합니다. ldd로 확인해봅니다.
ldd /bin/bash
# 출력 예시:
linux-vdso.so.1 (0x00007ffd40d05000)
libtinfo.so.6 => /lib64/libtinfo.so.6
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
필요한 라이브러리를 app/lib64/에 넣습니다.
cp /lib64/{libtinfo.so.6,libc.so.6,ld-linux-x86-64.so.2} app/lib64/
이제 app 디렉토리를 루트로 해서 진입합니다.
sudo chroot app /bin/bash
bash-5.2#
pwd
# 출력: /
bash는 실행되지만, ls, cat 같은 명령어는 없습니다.
이유: 아직 /bin/ls, /bin/cat 같은 실행파일과 그 라이브러리를 안 넣었기 때문.
즉, 필요한 실행파일과 라이브러리를 하나씩 추가해주면 점점 "작동하는 컨테이너"에 가까워집니다.
chroot는 파일시스템만 격리합니다.
컨테이너(Docker): chroot 개념 + 리눅스 namespace, cgroups, overlayfs를 조합
-PID namespace → 프로세스 격리
-Network namespace → 네트워크 격리
-User namespace → 사용자 격리
-cgroups → CPU, 메모리 제한
-OverlayFS → 이미지 레이어 구조
👉 즉, 컨테이너는 “chroot에서 출발해 더 많은 기능을 붙인 것”입니다.