프로필 보기
달소
Proxmox에서 리눅스 컨테이너(LXC) 생성해보기.
안녕하세요. 달소입니다.
앞선글에서는 리눅스와 VM에 대해서 가이드를 썼고 이번글은 LXC에 대한 내용입니다.
Proxmox LXC (Linux Containers) 개요
Proxmox Virtual Environment에서 LXC는 가상화 솔루션 중 하나로, 운영체제 수준의 가상화를 제공합니다. 이는 단일 Linux 커널을 여러 격리된 사용자 공간(컨테이너)으로 분할하는 기술입니다. 각 컨테이너는 독립된 시스템처럼 보이지만, 호스트 OS의 커널을 공유하여 매우 가볍고 효율적으로 작동합니다.
1. LXC (Linux Containers)란?
LXC는 하이퍼바이저를 사용하지 않고도 가상화된 환경을 제공하는 컨테이너 기술입니다. 이는 다음 두 가지 핵심 Linux 커널 기능을 활용합니다.
-
Cgroups (Control Groups): CPU, 메모리, I/O 등과 같은 자원 사용량을 제한하고 격리하는 데 사용됩니다.
-
Namespaces: 프로세스 ID, 네트워크, 사용자 ID 등과 같은 시스템 자원을 격리하여 각 컨테이너가 자체적인 독립된 환경을 갖도록 합니다.
이러한 기술 덕분에 컨테이너는 가상 머신(VM)보다 훨씬 적은 오버헤드로 실행됩니다.
2. VM (Virtual Machine)과의 차이점
|
특징 |
가상 머신 (VM) |
LXC (Linux Containers) |
|---|---|---|
|
가상화 방식 |
하드웨어 수준 가상화 |
운영체제 수준 가상화 |
|
운영체제 |
각 VM에 자체 OS 커널 필요 |
호스트 OS의 커널 공유 |
|
자원 사용량 |
하이퍼바이저와 VM OS로 인해 높음 |
호스트 OS 커널 공유로 낮음 |
|
성능 |
호스트와 완벽하게 격리, 약간의 성능 저하 |
거의 네이티브에 가까운 성능 |
|
시작 시간 |
OS 부팅 시간으로 인해 느림 |
몇 초 내로 매우 빠름 |
|
주요 용도 |
다양한 OS를 실행해야 할 때, 강력한 격리가 필요할 때 (예: Windows VM) |
Linux 기반 애플리케이션의 빠르고 가벼운 배포, 격리된 개발 환경 구축 |
VM과의 마이그레이션 및 백업 방식 차이점
컨테이너는 VM과 가상화 방식이 다르기 때문에, 실시간 마이그레이션(Live Migration)과 백업 방식에서도 차이가 있습니다.
-
실시간 마이그레이션 (Live Migration):
-
VM: 하이퍼바이저를 통해 VM의 메모리, CPU 레지스터, 디스크 상태 등을 통째로 옮기므로, VM을 중단 없이 다른 호스트로 이동시킬 수 있습니다.
-
LXC: 프로세스 상태를 저장하고 복원하는
CRIU와 같은 기술을 사용합니다. VM에 비해 제약 사항이 많고, VM만큼 안정적이고 보편적으로 사용되지는 않습니다.
-
-
백업 방식 (Backup Method):
-
VM: VM의 가상 디스크 파일(.qcow2, .vmdk 등)과 설정 파일을 백업합니다. VM의 크기가 클수록 백업 파일도 커지고 시간이 오래 걸립니다.
-
LXC: 컨테이너의 파일 시스템과 설정 파일만을 백업합니다. 호스트 커널은 백업 대상에 포함되지 않아 백업 파일의 크기가 훨씬 작고 백업 속도가 빠릅니다. 하지만 백업 시 컨테이너가 일시적으로 정지(suspended)되므로, 운영 중인 서비스에 영향을 줄 수 있다는 단점이 있습니다.
-
Proxmox에서 LXC 설치하기
lxc 템플릿 받기
기본적으로 proxmox에서 제공하는 lxc 템플릿이 있어서 편하게 구성할 수 있습니다.
이미지파일을 직접올려도 되고 이렇게 템플릿으로 된 걸다운로드받아도됩니다.

저는 익숙한 Ubuntu 24로 했습니다

LXC 컨테이너 생성하기
Proxmox 콘솔에서 CT생성으로 갑니다.

호스트명은 lxc 에서 사용할 hostname이 되고 비밀번호는 root pw 입니다.
권한있는 컨테이너와 없는 컨테이너의 차이 와 네스팅 옵션의경우 아래 내용을 참고하시면 되겠습니다.

권한 있는 (Privileged) vs. 권한 없는 (Unprivileged) 컨테이너
컨테이너를 생성할 때 가장 중요한 보안 설정 중 하나는 Privileged 옵션입니다. 이 설정은 컨테이너 내부의 root 사용자가 호스트 시스템에 대해 어느 정도의 권한을 가지는지 결정합니다.
권한 있는 컨테이너 (Privileged Container)
-
정의: 컨테이너 내부의
root사용자가 호스트 시스템의root사용자와 동일한 권한을 가집니다. 즉, UID (User ID)와 GID (Group ID)가 호스트와 컨테이너 간에 매핑되지 않습니다. -
장점:
-
특정 하드웨어 장치에 직접 접근해야 하는 애플리케이션(예: USB 장치, GPU)을 실행할 수 있습니다.
-
오래된 커널 또는 특수한 기능(예: Docker in LXC)을 사용하는 애플리케이션에 대한 호환성이 높습니다.
-
-
단점:
-
심각한 보안 취약성: 컨테이너 내부에서 탈출(escape)하여 호스트 시스템에 직접 접근하고 악의적인 행위를 할 수 있는 위험이 매우 높습니다. 컨테이너가 해킹당하면 호스트 전체가 위험해집니다.
-
안전하지 않음: 대부분의 경우, 보안상의 이유로 권장되지 않습니다.
-
권한 없는 컨테이너 (Unprivileged Container)
-
정의: 컨테이너 내부의
root사용자가 호스트 시스템의 일반 사용자 계정에 매핑됩니다. 즉, 컨테이너 내부의root사용자의 UID/GID는 호스트의 비루트(non-root) UID/GID로 매핑되어 권한이 크게 제한됩니다. -
장점:
-
높은 보안성: 컨테이너가 해킹되더라도 공격자가 호스트 시스템에 대한
root권한을 얻을 수 없습니다. 이는 컨테이너 탈출 공격의 위험을 크게 줄여줍니다. -
안전성: 대부분의 일반적인 사용 사례(웹 서버, 데이터베이스 등)에 충분하며, 보안상 가장 권장되는 방식입니다.
-
-
단점:
-
특정 장치나 커널 기능에 대한 접근이 제한될 수 있습니다. 이로 인해 일부 특수한 애플리케이션의 호환성 문제가 발생할 수 있습니다. (예: FUSE 파일 시스템, 특정 마운트 옵션)
-
결론:
특별한 이유가 없다면 항상 권한 없는 컨테이너를 사용하는 것이 보안상 바람직합니다. 권한 있는 컨테이너는 특정 하드웨어 접근이 반드시 필요하거나 호환성 문제가 해결되지 않을 때만 최후의 수단으로 고려해야 합니다. Proxmox는 기본적으로 권한 없는 컨테이너 생성을 권장하며, 사용자가 명시적으로 선택해야만 권한 있는 컨테이너를 생성할 수 있도록 되어 있습니다.
컨테이너 네스팅 (Nesting) 옵션의 역할
컨테이너 네스팅은 컨테이너 내부에 또 다른 컨테이너 런타임(예: Docker)을 실행하는 것을 의미합니다. 이러한 네스팅을 위해서는 컨테이너 내부에서 특정 커널 권한이 필요하며, Proxmox는 이 기능을 별도의 Nesting 옵션으로 제공합니다.
-
권한 없는 컨테이너 + 네스팅: Proxmox에서 가장 권장되는 방식입니다. 컨테이너 내부의
root권한을 호스트의 일반 사용자에 매핑하여 보안을 유지하면서도, 네스팅에 필요한 특정 권한만을 허용합니다. 이를 통해 완전한Privileged컨테이너보다 훨씬 안전하게 컨테이너 내부에서 도커를 실행할 수 있습니다. -
권한 있는 컨테이너 + 네스팅: 이 경우, 네스팅 옵션을 따로 활성화하지 않아도 컨테이너가 이미 모든 권한을 가지고 있으므로, 네스팅 기능이 자동으로 작동합니다. 그러나 이는 보안상 매우 취약하므로 피해야 합니다.
결론:
특별한 이유가 없다면 항상 권한 없는 컨테이너를 사용하는 것이 보안상 바람직합니다. 네스팅이 필요한 경우, Unprivileged 컨테이너를 선택한 후 Nesting 옵션을 활성화하는 것이 가장 안전한 접근 방식입니다.
템플릿은 설치할 OS 정보입니다.

디스크도 사용할만큼 지정해주시고

CPU와 메모리를 적당히 설정해주세요.
네트워크 설정에서 DHCP나 고정IP 입맛에 맞게 지정해주시면됩니다.

고정이면 이렇게 넣어주시구요

DNS도 host를 따라가게하거나 지정해줄수도있습니다.

이제 설정해준것을 확인하고 "생성 후 시작" 체크하고 마침을 눌러줍니다.

한 10초 기다리면 생성됩니다

lxc가 생성되면 콘솔에서 로그인창이 나오고 지정한 root pw로 접속해주시면됩니다.

lxc이다보니 요약에서 실제 사용하고있는 리소스도 정확하게 확인이 됩니다.

vm이랑 비교하면 커널버전이 조금 더 위인건 신기하네요 ㅎㅎ생각해보니 커널은 호스트를 따라가는거였네요
메모리 사용량은 거의 10배..!
확실히 lxc가 가볍긴합니다.
다만 위 설명에도 언급했듯 VM과의 여러가지 차이점이 있기때문에 잘 판단해서 구성해보시면되겠습니다.






kmw_
한꼬푸
댓글
댓글 쓰기