왜 리눅스에서 Docker를 운영해야 하는가?
- 리눅스 커널의 기능을 기반으로 컨테이너가 만들어졌다.
(1) chroot : 독립된 공간을 형성
(2) namespace : 독립된 공간에 6가지 isolate를 제공 (각 컨테이너가 마치 하나의 가상 시스템인 것처럼)
(3) cgroup : 필요한만큼의 H/W를 지원.
★ chroot 로 root directory를 바꾸며, namespace로 프로세스를 격리하고, cgroups 으로 컴퓨팅 자원들을 제한하고 격리한다.
1. chroot
사용자가 신뢰할 수 없는 프로그램을 테스트하고 나머지 컴퓨터에는 영향을 미치지 않는 다른 작업을 수행 할 수 있는 컴퓨터 시스템의 격리된 영역이다.
사용자가 chroot 환경을 작성할 떄 해당 환경에서 실행되는 프로그램은 지정된 디렉토리를 루트로 취급한다. 이들 프로그램은 상위 디렉토리가 없으므로 파일 시스템 맨위에 있는 실제 루트 디렉토리에 액세스할 수 없다고 가정한다.
$ chroot /home/jwjeong/new_root /bin/bash
기본적으로 chroot 명령어 뒤에 루트로 사용할 디렉토리를 지정하고, 그 뒤에 이 루트를 기반으로 실행할 애플리케이션의 경로를 지정하는 방식이다. (chroot는 root 권한이 필요)
chroot는 Change Root Directory의 줄임말로 명령어 자체가 루트 디렉토리를 바꾼다는 뜻을 가지고 있다.
2. namespace
프로그래밍 언어에서도 많이 등장하는 Namespace는 간단하게 isolation 이라고 생각하면 된다.
Namespace는 커널에서 제공하고 있으며, 하나의 시스템에서 프로세스를 격리(isolation) 시킬 수 있는 가상화 기술이다.
아래와 같이 6가지 Namespace가 존재한다.
- Mount : 파일 시스템 마운트 포인트를 격리
- UTS : Hostname 과 Domainname 을 격리
- IPC : Interprocess communication (IPC) 자원을 격리
- PID : Process ID 격리
- Network : Network Interface 격리
- User : UID 와 GID 격리
*IPC : 프로세스 사이의 데이터통신은 IPC를 통해서 한다. 프로세스는 IPC를 통하여 다른 프로세스에게 데이터를 송신하거나 , 다른 프로세스로부터 데이터를 수신할 수 있다.
3. cgroups
프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리 시킬 수 있는 리눅스 커널의 막강한 기능
cgroups를 이용하게 되면 다음의 자원들을 제한할 수 있다.
- Memroy
- CPU
- Network
- Device
- I/O
Linux에서 cgroup 기능을 사용해보려면, cgroup-tools 패키지 관리자를 이용하여 설치하면 cgcreate와 cgdelete 등의 명령어나 cgconfig.conf 와 cgrules.conf 파일을 이용한 관리가 가능해진다.
Reference
'OS > Linux Server' 카테고리의 다른 글
[Linux] 디스크 용량 확인 (0) | 2021.12.13 |
---|---|
[Linux] Root 비밀번호 분실 시 찾기 (0) | 2021.12.13 |
[Linux] Linux Command - Mornitoring (0) | 2021.11.24 |
[Linux] File System (0) | 2021.11.23 |
[Linux] Linux Directory 구조 (0) | 2021.11.23 |