✔️ Alpine Linux
Busybox + APK(패키지 관리자)
패키지 인덱스
apk update
패키지 검색
apk search <PKG>
패키지 추가
apk add <PKG>
패키지 제거
apk del <PKG>
다음 세개의 python official image를 비교해보자
vagrant@docker ~/image-build/myweb-ubuntu docker pull python:3.9-buster
vagrant@docker ~/image-build/myweb-ubuntu docker pull python:3.9-slim-buster
vagrant@docker ~/image-build/myweb-ubuntu docker pull python:3.9-alpine
vagrant@docker ~/image-build/myweb-ubuntu docker image ls | grep python
python 3.9-buster 2081325398fc 2 weeks ago 889MB
python 3.9-slim-buster 975c845dddf2 2 weeks ago 118MB
python 3.9-alpine 9f14ea10b146 3 weeks ago 47.5MB
세 이미지 모두 Debian 리눅스에 + Python 3.9 인터프리터를 설치해 놓은 것이다.
buster : 거의 모든 라이브러리가 설치되어 있다.
slim-buster : 표준 라이브러리 빼고 다 제거되어 있다.
busybox
임베디드 장치에 사용하기 위해 만들어진 아주 작은 용량의 리눅스이다.
vagrant@docker ~/image-build/myweb-ubuntu wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
vagrant@docker ~ ls
a.sh busybox-1.35.0.tar.bz2 clang focal-v2.tar httpd.conf python
a.txt centos7 contents hello-world.tar httpd.tar
b.txt centos7.tar focal-v2 httpd image-build
vagrant@docker ~ ls -lh busybox-1.35.0.tar.bz2
-rw-rw-r-- 1 vagrant vagrant 2.4M Dec 27 02:24 busybox-1.35.0.tar.bz2
busybox 리눅스의 아카이브된 파일을 살펴보면 2.4M 용량을 가진다.
vagrant@docker ~ tar xf busybox-1.35.0.tar.bz2
vagrant@docker ~ ls
a.sh busybox-1.35.0 centos7.tar focal-v2 httpd image-build
a.txt busybox-1.35.0.tar.bz2 clang focal-v2.tar httpd.conf python
b.txt centos7 contents hello-world.tar httpd.tar
vagrant@docker ~ du -sh busybox-1.35.0
20M busybox-1.35.0
압축을 푼 사이즈도 20M 정도밖에 안된다.
리눅스 커널과 핵심 bin/library만 포함하고 있는 아주 작은 사이즈의 리눅스이다.
busybox는 스토리지나 메모리가 제한된 장치에 사용하기위해 작은 사이즈로 만들어놓았는데 여기에는 패키지 관리자가 없다.
패키지를 설치하려면 소스 코드를 직접 실행 파일로 빌드 해야하며 그 실행 파일을 특정 디렉토리에 갖다 놔야 한다.
이러한 방식은 사용하기 매우 불편하기 때문에 편의성을 위해 만든 것이 알파인 리눅스이다.
busybox에 apk라는 패키지 관리자를 포함해서 만든 리눅스가 알파인 리눅스이다.
vagrant@docker ~ docker pull alpine:3
3: Pulling from library/alpine
df9b9388f04a: Already exists
Digest: sha256:4edbd2beb5f78b1014028f4fbb99f3237d9561100b6881aabbf5acce2c4f9454
Status: Downloaded newer image for alpine:3
docker.io/library/alpine:3
알파인 리눅스 컨테이너를 띄워보자
vagrant@docker ~ docker run -it alpine:3 bash
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "bash": executable file not found in $PATH: unknown.
ERRO[0001] error waiting for container: context canceled
✘ vagrant@docker ~ docker run -it alpine:3 sh
/ #
bash 쉘이 없고 본 쉘(Bourne shell)만을 가진다.
알파인 리눅스를 제외한 기존의 리눅스는 대부분 Glibc를 사용한다.
libc - C 라이브러리 라는 뜻이다.
즉 binary를 실행할 때 libc를 사용해야 하는데 C 라이브러리는 Glibc 말고도 다양하다.
알파인 리눅스는 musl을 사용한다. Glibc보다 용량이 훨씬 작다.
Glibc와 musl이 완전하게 호환되지 않기 때문에, 종종 오동작이 발생할 수도 있다.
따라서 알파인 리눅스에서 성능 측면의 문제가 발생할 수도 있다.
mysql 같은 경우 C로 만들어져 있는데 Glibc보다 musl에서 느리다.
그럼에도 컨테이너는 작은 용량의 어플리케이션의 실행이 주목적이므로 알파인 리눅스를 사용한다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Flask App을 Docker 이미지로 빌드하기 (0) | 2022.05.12 |
---|---|
[Docker] multistage-build (멀티 스테이지 빌드) (0) | 2022.05.12 |
[Docker] Dockerfile 이미지 빌드와 Cache (0) | 2022.05.11 |
[Docker] ubuntu 이미지로 httpd 서비스 이미지 만들기 ( + Timezone 세팅) (0) | 2022.05.11 |
[Docker] Shell(쉘) 변수 (0) | 2022.05.11 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!