Docker나 Kubernetes 워커 노드에 어떤 OS를 올리느냐는 컨테이너 이미지 안에 무엇을 넣을지와는 완전히 다른 문제예요. Alpine Linux를 컨테이너 이미지 기반으로 다뤘다면, 이번에는 관점을 바꿔서 컨테이너를 실행하는 호스트 서버 자체의 OS를 살펴봐야 해요. 그렇다면 Alpine, Flatcar, Bottlerocket이라는 세 컨테이너 호스트 OS는 서로 어떻게 다를까요?
Alpine Linux는 범용 초경량 배포판이다
Alpine은 원래 컨테이너 이미지 기반으로 유명하지만, 호스트 OS로도 종종 쓰여요.
- 작은 설치 용량: musl libc와 BusyBox 기반이라 설치 용량이 매우 작아요.
- 범용성: 범용 배포판이라 필요하면 일반적인 패키지도 자유롭게 설치할 수 있어요.
- 직접 구성해야 하는 보안 설정: 다만 호스트 전용으로 설계된 게 아니라서, Kubernetes 운영에 필요한 세부 보안 설정은 직접 구성해야 해요.
Flatcar Container Linux는 CoreOS의 정신을 잇는다
Flatcar는 단종된 CoreOS의 정신을 잇는 배포판으로, 처음부터 “컨테이너만 돌리는 서버”를 목표로 설계됐어요.
- 원자적 업데이트: 루트 파일시스템이 읽기 전용이고 A/B 파티션 구조로 원자적(atomic) 업데이트가 이루어져요.
- 패키지 매니저 부재: 패키지 매니저 자체가 없어서, 필요한 도구는 컨테이너로 실행해요.
- 클러스터 운영 최적화: etcd, Kubernetes와의 통합을 염두에 두고 설계돼서 클러스터 운영에 최적화돼 있어요.
즉 “서버에 뭔가를 설치한다”는 개념 자체를 없애고, 오직 컨테이너 오케스트레이션을 돌리기 위한 최소한의 기반으로만 존재하는 셈이에요.
Bottlerocket은 AWS가 만든 컨테이너 전용 OS다
Bottlerocket은 AWS가 자사 클라우드에 최적화해 만든 오픈소스 컨테이너 호스트 OS예요.
- 극단적으로 줄인 공격 표면: 패키지 매니저가 없고 SSH도 기본 비활성화돼 있어서 공격 표면을 극단적으로 줄인 설계예요.
- API 기반 설정: 설정은 SSH 접속 대신 API를 통해서만 변경할 수 있어요.
- AWS 연동 특화: 컨테이너 런타임(containerd)과 Kubernetes/ECS 연동에 특화돼 있어요.
- 메모리 안전성: Rust로 작성된 구성 요소 비중이 높아서 메모리 안전성 측면에서도 강점이 있어요.
세 가지를 표로 비교하면
| 기준 | Alpine | Flatcar | Bottlerocket |
|---|---|---|---|
| 성격 | 범용 초경량 배포판 | 컨테이너 전용 OS | 컨테이너 전용 OS |
| 패키지 매니저 | apk 있음 | 없음 | 없음 |
| SSH 접속 | 기본 가능 | 제한적 | 기본 비활성화 |
| 업데이트 방식 | 일반 패키지 업데이트 | A/B 원자적 업데이트 | A/B 원자적 업데이트 |
| 주 사용처 | 범용 컨테이너 이미지 | 온프레미스 K8s 클러스터 | AWS EKS/ECS |
어떤 상황에 무엇을 골라야 할까
결론부터 말하면 선택 기준은 운영 환경과 보안 요구 수준에 달려 있어요.
- 가볍고 유연한 호스트가 필요하다면: Alpine이에요. 필요하면 임시로 디버깅 도구도 설치할 수 있어요.
- 자체 데이터센터에서 안정적인 운영을 원한다면: Flatcar예요. 원자적 업데이트와 자동 롤백이 운영 부담을 크게 줄여줘요.
- AWS 환경에서 공격 표면을 최소화하고 싶다면: Bottlerocket이에요. SSH조차 열지 않는 설계 철학이 규제 산업 환경에 특히 유리해요.
세 배포판 모두 서버에 이것저것 설치해서 관리하는 전통적인 방식과 결별하고, 컨테이너만 실행되는 불변 인프라(immutable infrastructure)를 지향한다는 공통점이 있어요. 이건 Fedora Silverblue의 불변 철학이 서버 영역에서는 이미 훨씬 더 극단적으로 실현돼 있다는 뜻이기도 하고, ARM 서버 생태계가 커지는 흐름과 맞물려 이런 경량 불변 호스트 OS의 존재감은 앞으로 더 커질 가능성이 높아요.
자주 묻는 질문
Q1. Alpine을 컨테이너 호스트 OS로 써도 되나요?
네, 가능하지만 호스트 전용으로 설계된 게 아니라서 Kubernetes 운영에 필요한 세부 보안 설정은 직접 구성해야 해요.
Q2. Flatcar에는 왜 패키지 매니저가 없나요?
서버에 뭔가를 설치한다는 개념 자체를 없애고 컨테이너 오케스트레이션만을 위한 최소 기반으로 설계됐기 때문에, 필요한 도구는 컨테이너로 실행해요.
Q3. Bottlerocket은 왜 SSH를 기본으로 막아두나요?
공격 표면을 극단적으로 줄이기 위한 설계이고, 설정 변경은 SSH 접속 대신 API를 통해서만 이루어져요.
Q4. AWS 환경이 아니어도 Bottlerocket을 쓸 수 있나요?
기술적으로는 가능하지만 AWS EKS/ECS와의 연동에 특화돼 있어서, 온프레미스 환경이라면 Flatcar가 더 적합해요.
Q5. 세 OS의 공통점은 뭔가요?
모두 서버에 이것저것 설치해서 관리하는 전통적인 방식과 결별하고, 컨테이너만 실행되는 불변 인프라를 지향한다는 공통점이 있어요.
컨테이너에 최적화된 초경량 배포판: Alpine Linux 활용기
Docker 이미지 용량을 극적으로 줄여주는 Alpine Linux의 구조와, 실무에서 마주치는 musl libc 호환성 이슈를 정리합니다.
컨테이너 vs 가상머신, 리눅스에서 뭘 골라야 할까
Docker 컨테이너와 KVM·VirtualBox 가상머신의 격리 방식 차이부터 리소스 오버헤드, 부팅 속도, 보안 수준까지 비교하고 실제 상황별로 무엇을 골라야 하는지 정리합니다.
라즈베리파이용 리눅스 비교 (Raspberry Pi OS vs DietPi vs Alpine)
라즈베리파이에 어떤 리눅스를 올릴지 고민된다면, 세 가지 대표 배포판의 특징과 적합한 용도를 비교해봅니다.