본문 바로가기
Development Tools/Docker

Docker 에서 표준적으로 쓰이는 Apline Linux 는 뭔가요?

by jjerryhan 2018. 1. 2.
반응형

Docker 에서 표준적으로 쓰이는 Apline Linux 는 뭔가요?

docker 는 경량의 컨테이너에 기반해 서비스를 운영하는 마이크로서비스 아키텍쳐를 가능하게 하는 기본 중의 기본이지요. 
그런데 docker 를 조금만 다루다 보면 거의 모든 Linux Image 가 최근 Apline Linux 를 Base 로 하고 있습니다. 
그래서 궁금하면 참지 못하는 제 성격으로 Alpline 리눅스에 대해 조금만 알아 보았습니다. 

우선 Docker 허브를 보면 Apline 리눅스는 musl libc (머슬 라이브러리) 와 BusyBox (비지박스) 로 구성된 리눅스 배포판으로 되어 있습니다.  


musl libc 는 경량의 embedded linux 를 위한 신뢰성 있는 C/POSIX library 의 모음입니다. 즉 C 표준 또는 POSIX 의 표준에 맞추어 짠 프로그램이 실행될 때 실제로 동작하고 사용하게 되는 연관 프로그램 바이너리(라이브러리)입니다. 


POSIX 는 Unix 계열 OS 가 광범위하게 각자 자기 벤더들의 편의에 의해 변종과 확장이 발생하면서 상호 프로그램간의 호환성에 문제가 생기기 시작하자, Unix 계열 OS 끼리는 프로그램이 서호 호환되게 실행될 수 있도록 표준을 수립한 것입니다. 

영어로 풀어 쓰자면 portable operating system interface 이고 한글로 풀어 쓰자면 이식 가능 운영 체제 인터페이스 입니다.


재밌는 것은 POSIX 는 Unix 계열의 OS 끼리 프로그램의 호환성을 위한 지정한 규격이지만 너무 광범위하게 Unix 계열의 OS 가 사용되는 현실(?) 때문에 사실상 POSIX 가 표준이라는 겁니다.  즉 Microsoft 도 이를 지원하고 있다는 사실이죠. 


우선 POSIX 를 지원 인증 OS 는 아래와 같습니다. 

AIX

HP-UX

IRIX

EulerOS

macOS

Solaris

Tru64

UnixWare

QNX Neutrino

Inspur K-UX

Integrity


그리고 POSIX 를 호환되게 지원하고 있는 OS 는 아래와 같습니다.

Android

BeOS

Contiki

Darwin

FreeBSD

illumos

Linux

LynxOS

MINIX

MPE/iX

NetBSD

Nucleus RTOS

NuttX

OpenBSD

OpenSolaris

PikeOS RTOS for embedded systems

Redox

RTEMS

Sanos

SkyOS

Syllable

VSTa

VMware ESXi

VxWorks

Xenix


Microsoft 의 POISX 지원 목록입니다.

Cygwin

MinGW

Microsoft POSIX subsystem

Interix

Windows Subsystem for Linux

UWIN

MKS Toolkit

Windows C Runtime Library 와 Windows Sockets API

과거에는 위에 목록된 몇가지 항목들은 돈을 받고 팔기도 했구요.  사실상 Cygwin 과 MinGW 를 많이 사용하시지만, Windows C Runtime Library 와 Sockets API 도 POSIX 에 기반하고 있다는 사실이 흥미롭지요. 현재는 MS 가 Bash 쉘을 직접 지원하는 단계까지 왔지만요. 


이야기가 또 길어졌는데 아무튼 경량의 embedded linux 를 위한 초경량의 C/POSIX library 가 musl libc 입니다.



그리고 BusyBox 는 마찬가지로 UNIX 계열 OS 내에 이는 공통 유틸리티들 중에 서버 운영에 필요한 공통적으로 사용되는 팩키지들만을 모은 역시나 초 경량의 팩키지 입니다. 

실행 파일(executable) 을 여러 파일이 아닌 하나의 파일로 묶어 버려서 용량을 절감하는 극단적인 경량효율을 제공합니다. 그러면서도 실행에는 아무 문제가 없게 만들어 준 것이지요. 



그리고 Alpine Linux 는 이 둘을 기반으로 해서 만든 초 경량의 linux 배포판으로 이해하시면 됩니다. 실제 OS 에서 Server 운영 또는 Container 운영에 필요한 바이너리만을 추리고, 추려진 바이너리들을 한번 더 합치거나 줄이거나 해서 만들어낸 것이지요. 

그래서 정말 작습니다. 


ubuntu 이미지는 111MB, fedora 는 252MB 인데 비해 alpine 은 고작 4.14MB 입니다. 4.14MB 놀랍죠.

물론 Alpine 리눅스를 바로 서비스 운영에 사용할 수는 없구요(정말 최소한만 담고 있기 때문에요.) Alpine 리눅스에 포함된 Package Repository 관리 도구로 서비스 운영에 필요한 바이너리들을 추가로 설치하여 서비스 운영 image 를 생성하는 방식을 사용하게 됩니다. 


이런 이유로 대부분의 Docker 이미지들은 Alpine Linux 를 Base 로 해서 구성하는 방식을 따르는 것이지요.  

본의 아니게 또 포스트로 정리하다 보니 내용이 길어지게 되네요.  끝까지 읽어 주셔서 감사합니다.


이번 포스트는 여기까지 입니다. 

'Development Tools > Docker' 카테고리의 다른 글

Docker Network 구성하기  (0) 2018.01.02
Docker Hub 에 내 이미지 배포하기  (0) 2018.01.02
Docker 이미지 만들기  (0) 2017.12.31
Docker 를 통해 Node 서버 띄우기  (0) 2017.12.30
Docker를 통해 Nginx 띄우기  (0) 2017.12.30