[Linux] Alpine Linux (알파인 리눅스) 는 무엇일까?
[Linux] Alpine Linux (알파인 리눅스) 는 무엇일까?
l Linux
컨테이너 환경으로 다양한 서비스를 빌드하다보니, DevOps 팀에서 베이스 이미지를 ubuntu나 centos 대신 alpine(알파인) 리눅스를 사용하는 것이 어떻겠냐는 제안을 받았다. 리눅스는 다양한 커널 기반으로 배포판을 가지고 있다. 이번 포스트에서는 Alpine Linux (이하 “알파인 리눅스”)에 대해서 알아본다.
[개요]
알파인 리눅스는 리눅스 커널 기반으로 한 리눅스 배포판 중 하나이며 MIT 라이선스 아래에 배포되었으며 LEAF 리눅스의 포크 버전이다. 알파인 리눅스는 다른 배포판과 다르게 Musl과 BusyBox를 기반으로 한다. 알파인 리눅스의 컨셉은 LEAF 리눅스와 동일하게 “작고”, “보안이 뛰어나고”, “간단함”을 기반으로 한다. 하지만 시간이 지나면서 다양한 사람들에 의해 알파인 리눅스만의 형태로 발전되고 있다.
[특징]
장점
l 가볍고, 간단하며 보안성을 목적으로 개발한 배포판
l 용량을 줄이기 위해 시스템의 기본 C runtime을 glibc 대신 musl libc를 사용
l 다양한 쉘 명령어는 GNU util대신 busybox를 탑재
l 초경량(약 80MB) 배포판으로 임베디드나 네트워크 서버 등 특정 용도에 적합.
l 특히 도커(Docker) 공식 이미지로 채택되어 5MB 크기의 리눅스 이미지로 유명함
l 보안에 염두해두고 설계되어 모든 바이너리는 독립적인 실행 파일(PIE)로 컴파일
단점
l 리눅스 표준인 GNU 도구가 없어가나 Busybox가 대신 들어가 있어, 쉘 명령어를 실행할 때 주의가 필요
l 라이트한 대신 패키지가 설치되어 있지 않아 직접 설치해주어야 하는 것들이 많다.
l 이것저것 설치하다보면 표준 리눅스 배포판과 거의 비슷한 용량이 되기도 한다. (개인적인 생각)
BusyBox란? BusyBox란 일종의 명령어 모음집으로 박스안에 필요한 응용 프로그램들을 담아 놓은 것이다. 리눅스에서 사용되는 각 명령어들만 모아 놓아도 상당한 크기를 차지할 수 있는데, BusyBox에서는 각각에 함수들을 최소 사이즈로 다시 구현하였다. 그렇기 때문에 Embbeded(임베디드), 네트웍 서버 등 특정 용도에 적합하며 도커 컨테이너의 OS로 많이 사용한다. |
[자주 사용되는 명령어]
알파인 리눅스에서는 패키지 인스톨러가, 전통적인 yum, apt 대신에 apk를 사용한다. 그리고 기본 쉘이 배시가 아니라 애쉬(ash)이다.
명령 | 설명 |
apk update | 패키지 저장소 목록을 업데이트 |
apk search <package> | 패키지 저장소 목록에서 패키지를 검색. v 옵션으로 설명 확인 가능. |
apk add <package[=version]> | 패키지를 설치. 버전을 명시하여 설치 가능. |
apk del <package> | 특정 패키지를 제거 |
apk cache clean | 패키지 캐시를 모두 제거 |
apk cache -v sync | 패키지 캐시를 초기화하고 부족한 패키지를 자동으로 다운로드 |
apk stats | 현재 패키지 저장소에서 사용가능한 패키지나 설치된 패키지 등의 정보를 출력 |
apk fix | 복구가 필요한 패키지를 복구하거나 종속성을 제외하고 업그레이드 진행. |
apk info | 현재 설치된 모든 패키지 정보 나열. -L 옵션을 사용하면 패키지내 파일 정보 출력. |
[왜 컨테이너에서 알파인 리눅스를 사용할까?]
지극히 개인적인 생각이다. 컨테이너 이미지 파일을 만들 때, 베이스 이미지 위에 필요한 다양한 패키지를 설치하게 된다. 당연히 베이스 이미지 + 기타 필요한 패키지 크기만큼 이미지 사이즈가 되므로 빌드 후 용량도 커지게 된다. 그리고 이를 보관 및 배포하기 위해 스토리지 비용 및 네트워크 비용이 증가할 수 있다. 사실 스토리지 비용은 컴퓨팅 비용중에 가장 저렴한 부분 중 하나이다. 그래서 요즘은 용량 고민은 많이 하지 않는 편이다. 특히 온프레미스 환경에서 직접적으로 모든 것을 운용할 때에는 더더욱 그렇다. 하지만 클라우드 환경에선, 모든것이 비용으로 청구되기 때문에 최소한의 사이즈로 운영하면 비용 최적화에 많은 도움이 될 수 있을 것이라 생각한다.
[참고자료]
l Alpine Linux:Overview : https://wiki.alpinelinux.org/wiki/Alpine_Linux:Overview
l Alpine Linux : https://namu.wiki/w/Alpine%20Linux
2023-09-04 / Sungwook Kang / https://sungwookkang.com
리눅스, Linux, 알파인 리눅스, Apline Linux, APK 명령어, 리눅스 배포판