리눅스 컨테이너 정리

JACKJACK·2022년 10월 20일
1
post-thumbnail

📝리눅스 컨테이너란?

운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리환경에서 실행시킨다.

  • VM은 Hypervisor를 통해 하드웨어를 가상화 해 Guest OS를 따로 두는 반면에, 리눅스 컨테이너는 Host OS의 커널을 공유하기 때문에 실행속도가 빠르고 성능의 손실이 적다. 리눅스 컨테이너는 리눅스의 chroot, linux namespace, cgroup 외 여러 커널 기능을 활용해 프로세스를 격리시키며, 호스트 머신에게는 하나의 프로세스일 뿐이지만 컨테이너 안에서는 격리된 환경으로 인식된다.




📌컨테이너 격리기술의 핵심 리눅스 커널의 3요소

chroot, linux namespace, cgroup

  • chroot(change root) - 프로세스의 루트 디렉토리를 변경해 바깥의 디렉토리에 접근이 불가하게 만들어 프로세스를 물리적으로 격리시킴

  • linux namespace – 커널의 자원들을 나눠 이를 특정 프로세스에 제공, 해당 프로세스에서만 사용할수 있는 자원으로 가상화(PIDs, 네트워크, User ID 등..)

  • cgroups(control group) – 프로세스가 사용할 수 있는 리소스 양(CPU, 메모리)을 격리 및 제한(자원 제한, 우선순위 자원분배, 자원 사용량 기록, 프로세스 제어)




📝컨테이너의 종류

컨테이너의 종류에는 시스템 컨테이너, 어플리케이션 컨테이너가 있다.

  • 시스템 컨테이너는 하드웨어 가상화없이 OS를 실행하는 역할이며 여러 프로세스가 같은 환경을 공유하기 위해 실행된다. (ex. LXC - 리눅스 컨테이너, LXD - 리눅스 컨테이너 매니저)
  • 어플리케이션 컨테이너는 단 하나의 어플리케이션을 실행하는 역할이며 하나의 프로세스만 실행하기 때문에 확장이 쉽다.(ex. docker container)




📝컨테이너 런타임, 오케스트레이션

  • 컨테이너 런타임은 컨테이너를 실행하기 위해 필요한 기술들을 자동화 해주는 플랫폼(feat. docker)이며, 컴퓨터 형태와 상관없이 Host OS만으로 컨테이너 실행 가능하며 REST API로 조작이 가능하다.
  • 컨테이너 오케스트레이션(feat. kubernetes)은 다수의 컨테이너를 적절하게 분산하고 스케줄링 해주는 기술을 뜻한다.




💡결론

- 리눅스 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리환경에서 실행시킨다.

- 어플리케이션을 실행할 때 Host OS의 커널을 공유해 리소스를 보다 효율적으로 가볍게 사용하는 장점이 있다.

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글