"Namespace"
이미 널리 쓰이고 있는 컨테이너의 기반이 되는 기술이기 때문에
리눅스의 namespace가 무엇인지 알아보도록 하자.
Namespace는 프로그래밍 언어에서도 많이 등장하는데,
간단하게 isolation이라고 생각하면 된다.
리눅스의 namespace는 커널에서 제공하고 있으며
하나의 시스템에서 프로세스를 격리(Isolation)시킬 수 있는 가상화 기술이다.
예를 들어,
PID를 namespace를 통해 격리시킨다면
하나의 시스템에서 동일한 PID가 2개인 것처럼 프로세스를 만들 수 있다.
(사실은 2개가 아니지만 그렇게 보인다)
제일 먼저 찾아본 것은 우분투 메뉴얼이다.
http://manpages.ubuntu.com/manpages/xenial/man1/unshare.1.html
우분투에서는 unshare 라는 명령어를 통해 namespace를 구성할 수 있으며, 6가지 namespace가 존재한다.
Mount - 파일 시스템 마운트 포인트를 격리
UTS - hostname과 domainname을 격리
IPC - interprocess communication(IPC) 자원을 격리
PID - process ID 격리
Network - 네트워크 인터페이스 격리
User - UID와 GID 격리
간단한 예시를 들어보면
hwi@testcom:~$ hostname testcom hwi@testcom:~$ sudo unshare -u /bin/bash root@testcom:~# hostname new-hostname root@testcom:~# hostname new-hostname root@testcom:~# exit exit hwi@testcom:~$ hostname testcom
unshare 명령어를 통해서 UTS namespace를 생성하고
hostname을 변경하고 난 뒤에
namespace를 빠져나오면 원래의 hostname으로 돌아온 것을 확인할 수 있다.
이렇게 namespace를 이용하면
시스템 리소스에 영향을 끼치지 않는 격리된 환경을 구성할 수 있다.
이런식으로 독립된 namespace는
nsenter라는 명령어를 통해서 접근할 수 도 있다.
해당 포스트에서는 따로 실험하지 않지만
메뉴얼을 참고하도록 하자.
http://manpages.ubuntu.com/manpages/xenial/en/man1/nsenter.1.html
namespace는 CPU나 memory등의 물리적인 자원을 제한하지는 않는다.
이를 위해서 cgroup이라는 또 다른 커널의 기능이 존재하는데
다음 포스팅에서 설명하도록 하겠다.
'개발 > Linux' 카테고리의 다른 글
우분투 블루투스 스피커 설정 (0) | 2018.09.09 |
---|---|
[Linux] 리눅스 복사&붙여넣기 (2) | 2018.03.06 |
APT 403에러 (0) | 2018.03.06 |
Route table (0) | 2018.02.20 |
cgroups (1) | 2018.02.19 |