NET namespace 이전에 리눅스 컨테이너 (4)편에서는 프로세스 격리 기능 중 하나인 UTS namespace에 대해 살펴보았습니다. 리눅스 컨테이너에서 사용하는 여러 종류의 namespace 중 NET namespace는 컨테이너가 고유한 네트워크 인터페이스, IP 주소, 라우팅 테이블, 포트 등 네트워크 스택 전반을 독립적으로 소유하도록 하여, 네트워크 자원 측면에서의 완전한 격리를 제공합니다. 이를 통해 하나의 물리 서버에서 여러 컨테이너가 각각 자신만의 가상 네트워크 환경을 구성하고, 다른 컨테이너나 호스트와 충돌 없이 통신하거나 완전히 차단된 상태로 동작할 수 있습니다. Network Interface 네트워크 인터페이스(Network Interface)는 컴퓨터 시스템이 외부 네트워크와..
UTS namespace 이전에 리눅스 컨테이너 (3)편에서는 프로세스 격리 기능 중 하나인 PID namespace에 대해 살펴보았습니다. 리눅스 컨테이너에서 사용하는 여러 종류의 namespace 중 UTS namespace는 컨테이너가 고유한 hostname과 domain name을 갖도록 하여, 네트워크 식별자 측면에서의 독립성을 제공합니다. 이를 통해 하나의 물리 서버에서 여러 컨테이너가 서로 다른 호스트 이름을 사용하며 서로 간섭 없이 동작할 수 있습니다. hostname hostname은 리눅스 시스템에서 네트워크 상의 시스템을 식별하기 위한 이름입니다. 보통 사람이 읽기 쉬운 형식으로 지정되며, 시스템 관리자나 자동화 도구가 각 시스템을 구분할 때 주로 사용됩니다. 예를 들어 web-ser..
PID namespace 이전에 리눅스 컨테이너 (2)편에서는 프로세스 격리 기능 중 하나인 chroot에 대해 살펴보았습니다. 이번 글에서는 리눅스 컨테이너 기술의 핵심 개념 중 하나인 namespace 중에서 PID namespace에 대해 알아보겠습니다. 컨테이너와 커널 PID namespace에 대해 보기 전에, 먼저 리눅스 컨테이너 (1)편의 서론에서 언급했던 내용을 다시 살펴보겠습니다.컨테이너는 호스트 커널을 공유하면서도 사용자 공간은 독립적으로 분리된 실행 환경을 제공합니다. 이 개념을 실제로 확인하기 위해, 컨테이너 기술의 대표적인 도구인 docker를 사용해 실습해보겠습니다. 실습 환경은 (2)편과 동일하게 Multipass를 사용했습니다. 우선 docker가 설치되어 있는지 확인해보겠습..
chroot 이전에 리눅스 컨테이너 (1)편에서는 여러가지 프로세스 격리 기능들에 대해 간단히 살펴보았습니다. 이번 글에서는 격리 기능들 중 chroot의 동작 원리를 들여다보고, 실제로 어떻게 사용하는지 실습을 통해 알아보겠습니다. chroot를 실습하려면 리눅스 환경이 필요한데, 저는 이를 위해 Multipass를 사용했습니다. Multipass는 Ubuntu를 개발한 Canonical에서 제공하는 경량 가상 머신 관리자로, 로컬 환경에서 빠르고 간편하게 Ubuntu 인스턴스를 실행할 수 있도록 도와주는 도구입니다. 개발 및 테스트용 리눅스 환경을 구축할 때 매우 유용합니다. 동작 원리 chroot는 Change Root Directory 의 줄임말로 루트 디렉터리를 바꾼다는 뜻을 갖고 있습니다. 먼..
리눅스 컨테이너란? 리눅스 컨테이너(Linux Container)는 리눅스 커널이 제공하는 네임스페이스(namespace)와 cgroup(control groups) 등의 기능을 조합해 구현된 운영체제 수준의 가상화 기술입니다. 전통적인 하이퍼바이저 기반의 가상화가 하드웨어를 가상화하고 각 가상 머신(VM)이 자체 커널을 포함한 전체 운영체제를 구동하는 방식이라면, 컨테이너는 호스트 커널을 공유하면서도 사용자 공간(user space)은 독립적으로 분리된 실행 환경을 제공합니다. 기술적으로 보면, 컨테이너는 일종의 프로세스입니다. 하지만 이 프로세스는 외부의 다른 프로세스들과 PID, 파일 시스템, 네트워크, IPC, 사용자 정보 등의 리소스를 공유하지 않고, 마치 별도의 시스템처럼 동작하도록 구성됩니다..