: 리눅스
인스턴스 내에서 컨테이너
를 운용할 수 있게 하는 기술.
→ 쉽게 말해 Linux 커널
의 기능을 활용하여 가벼운 격리 환경에서 애플리케이션을 실행하기 위해 구현한 컨테이너
를 말한다.
[ ] Linux
환경에서 컨테이너
를 구현하는 데 사용되는 두 가지 주요 Linux 커널
구성 요소로 namespace
와 cgroups
가 존재한다.
[ ] 요약하면, 컨테이너는 Host OS
의 커널
을 공유하면서도 namespace
, cgroup
, chroot
을 통해 프로세스
들을 격리하고 리소스
를 관리
할 수 있게 된다 !
cgroup
(control group): 프로세스 그룹이 사용하는 시스템의 자원 제한, 관리, 격리시키는 리눅스 커널
의 기능.
→ 이 기능을 통해 컨테이너
안의 여러 프로세스
들의 자원
을 한 번에 관리할 수 있는 것이다 !
자원 제한
: 프로세스가 자원들을 얼마나 사용할지 제한한다.우선 순위 설정
: 다른 cgroup
의 프로세스들이 사용하는 자원들에 비해 얼마나 자원을 사용할지 설정한다.감시
: cgroup
단위에서 자원을 얼마나 사용하고 있는지 모니터링한다.관리
: cgroup
내에 있는 모든 프로세스들의 상태를 한 번에 변경한다.LXC
가 각 컨테이너
에 제어 가능한 리소스
를 효율적인 방식으로 할당하여 한 컨테이너
가 너무 많은 리소스
를 소비하여 다른 컨테이너
의 성능에 영향을 미치는 것을 방지할 수 있다 !namespace
: 리눅스 커널
에서 제공하는 프로세스 격리
기술.
→ 이러한 격리를 통해 한 컨테이너
내의 프로세스가 다른 컨테이너
의 리소스
를 간섭하거나 엑세스 할 수 없도록 한다.
C++
의 namespace
와 유사한 개념 !
→ 함수 이름(식별자)가 같더라도 다른 namespace
로 구별할 수 있는 것처럼, 프로세스의 PID
가 같더라도 다른 namespace
에 속한다면 다른 프로세스로 구별할 수 있도록 해준다.
→ 쉽게 말하면, 구별을 위한 공간, 즉 소속과 같은 개념이다.namespace
는 6가지의 종류가 있고 이것들을 통해 구별한다.
mnt(파일 시스템 마운트)
: Host 파일 시스템에 독립적인 파일 시스템 마운트pid(프로세스)
: 독립적인 프로세스 공간을 할당해준다.net(네트워크)
: namespace
간에 충돌을 방지해준다.(중복 포트 바인딩 등)ipc(Interprocess communication)
: 프로세스간의 독립적인 통신 통로를 제공해준다.uts(hostname)
: 독립적인 hostname를 할당 가능하게 한다.user(UID)
: 독립적인 사용자를 할당 가능하게 한다.