-
Docker) namesapce 실습해보기Cloud/Docker 2022. 9. 28. 01:14
실습 환경 : AWS console (2022/09), Visual Studio Code, Xshell7
실습 목적 : 리눅스 컨테이너 기술 기반인 namespace에 대해 알아보고 실습해본다.
namespace
- 프로세스별로 별도의 커널자원을 분할하는 Linux 커널 기능을 한다.
- namespace 종류로는 IPC, mnt, net, pid, pid_for_children, uts 가 있다.
- cgroup은 프로세스 사용량을 제한하는 목적이라면, namespace는 프로세스가 볼수있는 범위를 지정하는 목적이다.
Container
- Container는 완전 격리된 프로세스로 cgroup으로 자원 사용량을 제한하거나, namespace를 통해 볼수있는 자원을 제한할 수 있다.
namespace 종류
- PID namespace : 프로세스 ID정보를 격리하여 namespace와 다른 프로세스에 접근 불가하다.
- Network namespace : 네트워크 장치, IP주소, 포트, 라우팅테이블의 네트워크 리소스를 격리한다.
- User namesapce : 프로세스별로 UID, GID 정보를 격리한다.
- Mount namespace : 프로세스별로 마운트되는 파일시스템을 격리한다.
- IPC namespace : IPC(프로세스간 통신)를 격리하여, 다른 프로세스의 접근이나 제어를 방지한다.
- UTS namespace : 호스트 명이나 도메인명을 격리한다.
Mount namespace 실습해보기
1. 관리자로 사용자 변경
sudo su
2. Mount namespace 생성 후, Mount namespace로 생성된 프로세스 ID 확인
unshare -m /bin/bash echo $$
3. tmpfs를 /mnt에 마운트 후, 마운트가 잘 되었는지 확인
- tmpfs는 메모리 기반 임시 파일 시스템
- tmpfs는 사이즈를 지정하지않으면 물리메모리 절반 크기로 설정
- tmpfs는 휘발성 공간으로 reboot/booting시 소멸한다.mount -tmpfs tmpfs /mnt mount | grep /mnt
4. /mnt 디렉토리에 텍스트 파일 생성
echo "hello" > text.txt
5. 다른 프로세스로 접속하여 생성한 텍스트파일이 격리되어있는지 확인
- 다른 프로세스에서 접근하면 해당 파일을 읽을 수 없다.cat /mnt/text
6. nsenter 명령으로 다른 프로세스에서 격리된 namesapce에 진입할 수 있게 해준다.
sudo nsenter -t 1623 -a # sudo nsenter -t [PID] -a [namespace]
추가 설명
- unshare 명령
- namespace를 생성하는 명령
- unshare [옵션] [프로그램 [argument] ]로 사용한다.
- -p : PID namespace 생성
- -m : Mount namespace 생성
- -i : IPC namespace 생성
- -f : child 프로세스 생성
- PID namespace
- 현재 PID 확인 명령어 : echo $$
- 현재 상위 프로세스 정보 확인 명령어 : ps aux | head -n5
- namespace 생성 : unshare -pmif
- /proc 디렉토리에 proc mount : mount -t proc none /proc
- 현재 상위프로세스 정보 확인 : ps aux | head -n5
'Cloud > Docker' 카테고리의 다른 글
Docker) Docker Engine (0) 2022.09.28 Docker) Union file system의 OverlayFS 실습해보기 (0) 2022.09.28 Docker) cgroup (Control Group) 실습해보기 (0) 2022.09.27 Docker) chroot (Change Root) 실습해보기 (0) 2022.09.27 Docker) Docker를 알아보기 (0) 2022.09.27