정지용
기술스택 목록
인프라

Alpine Linux

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

musl libc와 BusyBox 기반으로 설계된 초경량 리눅스 배포판

Alpine Linux는 보안성과 단순함, 리소스 효율성을 목표로 만들어진 경량 리눅스 배포판이다. 대부분의 배포판이 사용하는 glibc 대신 musl libc를, GNU coreutils 대신 BusyBox를 채택해 설치 용량과 메모리 사용량을 크게 줄였다. 원래 임베디드 환경을 위해 만들어졌지만, 이미지 크기를 줄이려는 Docker 컨테이너 베이스 이미지로 널리 채택되었다.

이럴 때 사용합니다

  • Docker 이미지 크기와 배포 속도를 최소화하고 싶을 때
  • 임베디드·IoT처럼 저장 공간과 메모리가 제한된 환경을 다룰 때
  • 공격 표면을 줄여 컨테이너 보안성을 높이고 싶을 때

핵심 개념

musl libc
glibc를 대신하는 경량 C 표준 라이브러리로, 크기가 작고 정적 링크에 유리하지만 일부 소프트웨어와 호환성 문제를 일으킬 수 있다.
BusyBox
ls, cp, grep 같은 여러 유닉스 명령어를 하나의 실행 파일로 압축해 제공하는 도구 모음으로, 시스템 유틸리티의 용량을 크게 줄여준다.
apk
Alpine의 패키지 매니저로, apk add/del 명령을 통해 패키지를 설치·삭제하며 저장소 인덱스를 관리한다.
OpenRC
Alpine이 기본으로 사용하는 초기화 시스템으로, systemd보다 단순하고 가벼운 구조를 가진다.
Base Image 최소화
불필요한 라이브러리와 도구를 배제한 최소 구성으로 컨테이너 이미지 크기와 공격 표면을 줄이는 설계 철학을 말한다.

Alpine 기반 Node.js Dockerfile 예시

node:20-alpine 베이스 이미지를 사용해 애플리케이션을 빌드하며, apk로 네이티브 모듈 빌드에 필요한 도구를 설치한다.

Dockerfile
FROM node:20-alpine

WORKDIR /app
COPY package*.json ./
RUN apk add --no-cache python3 make g++ \
    && npm ci --omit=dev

COPY . .
CMD ["node", "index.js"]

처음 쓸 때 흔한 함정

  • musl libc 차이로 일부 네이티브 npm 패키지나 바이너리가 정상 동작하지 않을 수 있다
  • glibc 전용 소프트웨어는 별도 호환 레이어 없이 설치가 안 될 수 있다
  • apk 저장소에 원하는 패키지 버전이나 목록이 다른 배포판보다 제한적일 수 있다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.