초경량 Alpine Linux에 대해 조사했습니다.
배경
Docker 이미지의 경량화 이야기에 나오는 Alpine Linux에 대해 신경이 쓰여서 조사해 보았습니다.
Alpine Linux란?
임베디드 시스템에서 자주 사용되는 BusyBox와 musl을 기반으로 한 Linux 배포판.
BusyBox에 대해서는 아래가 정리되어 있어 보기 쉬웠습니다.
ht tp // //모이 st. 오 t r t. 이. jp / m / rc c / s / 0802 / 04 / 네 ws114. HTML
Docker 경계에서 자주 보이는 말이지만 특히 Docker용이라든가 그런 것은 아니다.
BusyBox + 패키지 매니저(apk)가 AlpineLinux의 개요입니다.
공식 사이트는 아래와 같습니다.
htps : // A l pinne x. rg/
(GitHub) htps : // 기주 b. 코 m/아 l 피네오 x
알파인의 특징에 가벼운 무게가 있지만 얼마나 가벼워지면 아래 비교를 보면 눈에 띄게
CentOS 약 4GB
우분투 약 700MB
Alpine 약 100MB
파일 구성
Alpine Linux가 어떤 구성인지를 docker를 사용하여 빨리 확인해 보겠습니다.
$ docker container run -it alpine /bin/ash
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
4fe2ade4980c: Already exists
Digest: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
Status: Downloaded newer image for alpine:latest
/ #
/ # ls -l /
total 52
drwxr-xr-x 2 root root 4096 Sep 11 20:23 bin
drwxr-xr-x 5 root root 360 Dec 11 06:29 dev
drwxr-xr-x 1 root root 4096 Dec 11 06:29 etc
drwxr-xr-x 2 root root 4096 Sep 11 20:23 home
drwxr-xr-x 5 root root 4096 Sep 11 20:23 lib
drwxr-xr-x 5 root root 4096 Sep 11 20:23 media
drwxr-xr-x 2 root root 4096 Sep 11 20:23 mnt
dr-xr-xr-x 303 root root 0 Dec 11 06:29 proc
drwx------ 1 root root 4096 Dec 11 06:30 root
drwxr-xr-x 2 root root 4096 Sep 11 20:23 run
drwxr-xr-x 2 root root 4096 Sep 11 20:23 sbin
drwxr-xr-x 2 root root 4096 Sep 11 20:23 srv
dr-xr-xr-x 13 root root 0 Dec 11 06:29 sys
drwxrwxrwt 2 root root 4096 Sep 11 20:23 tmp
drwxr-xr-x 7 root root 4096 Sep 11 20:23 usr
drwxr-xr-x 11 root root 4096 Sep 11 20:23 var
FHS에 준거해 만들어지고 있는 것을 알 수 있군요.
(당연하다고 말하면 당연)
/ # ls -l /bin/l*
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/link -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/linux32 -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/linux64 -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/ln -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/login -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/ls -> /bin/busybox
lrwxrwxrwx 1 root root 12 Sep 11 20:23 /bin/lzop -> /bin/busybox
또,/bin하락은 모두/bin/busybox에의 심볼릭 링크가 되고 있다.
busybox란 무엇입니까? Alpine Linux의 기반이 되는 Linux 배포판
표준 UNIX 명령을 사용하여 중요한 많은 프로그램을 단일 실행 파일에 "포함"하여 제공합니다.
특수한 방식의 프로그램입니다. 자세한 내용은 아래 위키를 참조하십시오.
htps : // 그럼.ぃきぺぢ아. 오 rg / uki / bu sybo x
busybox의 크기도 매우 작습니다.
~ # ls -lh /bin/busybox
-rwxr-xr-x 1 root root 777.6K Jul 17 15:22 /bin/busybox
기본적으로 설정된 환경 변수를 보면 최소함에 놀랍습니다.
덧붙여서 bash는 디폴트가 아니기 때문에 필요한 분은 인스톨이 별도 필요합니다.
ash라는 쉘이 채용되고 있습니다.
~ # env
HOSTNAME=de9c296717d8
SHLVL=1
HOME=/root
OLDPWD=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
패키지 관리자 'apk'
패키지 및 응용 프로그램을 설치하려면 apk를 사용합니다.
apt-get이나 yum이나 여러가지 사용하고 있으면 솔직히 엉망이 됩니다만, Alpine에서는 한층 더
다른 패키지 관리자를 사용합니다.
우선 update와 add와 del과 그에 관한 옵션을 기억해 두면 일은 부족할 것 같다.
apk help
usage가 보고 싶다면 여기까지.
뭐 자주 있는 패키지 매니저군요.
특필해 생각할 것은 없다.
$ sudo apk --help
apk-tools 2.10.1, compiled for x86_64.
Installing and removing packages:
add Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all dependencies are met
del Remove PACKAGEs from 'world' and uninstall them
System maintenance:
fix Repair package or upgrade it without modifying main dependencies
update Update repository indexes from all remote repositories
upgrade Upgrade currently installed packages to match repositories
cache Download missing PACKAGEs to cache and/or delete unneeded files from cache
Querying information about packages:
info Give detailed information about PACKAGEs or repositories
list List packages by PATTERN and other criteria
dot Generate graphviz graphs
policy Show repository policy for packages
Repository maintenance:
index Create repository index file from FILEs
fetch Download PACKAGEs from global repositories to a local directory
verify Verify package integrity and signature
manifest Show checksums of package contents
Use apk <command> --help for command-specific help.
Use apk --help --verbose for a full command listing.
This apk has coffee making abilities.
설치된 패키지 참조 info
초기 단계의 패키지의 적음에는 정말 놀랍네요.
$ apk info
WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
musl
busybox
alpine-baselayout
alpine-keys
libressl2.7-libcrypto
libressl2.7-libssl
libressl2.7-libtls
ssl_client
zlib
apk-tools
scanelf
musl-utils
libc-utils
패키지 업데이트 update
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
v3.8.1-142-g179c136670 [http://dl-cdn.alpinelinux.org/alpine/v3.8/main]
v3.8.1-142-g179c136670 [http://dl-cdn.alpinelinux.org/alpine/v3.8/community]
OK: 9548 distinct packages available
패키지 검색 search
vim을 사용하고 싶기 때문에 검색 대상으로하고 있습니다.
neovim등도 있는 것 같습니다만 우선 디폴트로 좋다고 생각하므로 그쪽을 넣는다
/ # apk search vim
charybdis-3.5.5-r4
neovim-doc-0.3.0-r0
vim-8.1.0115-r0
faenza-icon-theme-vim-1.3.1-r4
notmuch-vim-0.25.3-r1
docker-vim-18.06.1-r0
graphviz-2.40.1-r1
neovim-0.3.0-r0
vim-doc-8.1.0115-r0
vim-editorconfig-0_git20170721-r0
py-jinja2-vim-2.9.6-r0
vimdiff-8.1.0115-r0
asciidoc-vim-8.6.10-r0
neovim-lang-0.3.0-r0
nginx-vim-1.14.1-r0
msmtp-vim-1.6.6-r3
protobuf-vim-3.5.2-r0
icinga2-vim-2.8.4-r0
gst-plugins-base-1.14.0-r1
mercurial-vim-4.6.1-r0
설치 add
위에서 검색한 vim을 설치하고 있습니다.
=로 버전을 지정할 수도 있습니다.
개인적으로는 add라는 부속 명령보다 install라든지 해주는 편이 기억하기 쉬웠다. . .
/ # apk add vim
(1/5) Installing lua5.3-libs (5.3.5-r1)
(2/5) Installing ncurses-terminfo-base (6.1_p20180818-r1)
(3/5) Installing ncurses-terminfo (6.1_p20180818-r1)
(4/5) Installing ncurses-libs (6.1_p20180818-r1)
(5/5) Installing vim (8.1.0115-r0)
Executing busybox-1.28.4-r1.trigger
OK: 39 MiB in 18 packages
/ # ls -l /usr/bin/vim
-rwxr-xr-x 1 root root 2193672 Jun 25 15:52 /usr/bin/vim
패키지 삭제 del
포장 삭제는 del을 사용한다.
/ # apk del vim
(1/5) Purging vim (8.1.0115-r0)
(2/5) Purging lua5.3-libs (5.3.5-r1)
(3/5) Purging ncurses-libs (6.1_p20180818-r1)
(4/5) Purging ncurses-terminfo (6.1_p20180818-r1)
(5/5) Purging ncurses-terminfo-base (6.1_p20180818-r1)
Executing busybox-1.28.4-r1.trigger
OK: 4 MiB in 13 packages
덧붙여서 캐시는/var/cache/apk하에 설치되므로 불필요하면 삭제합시다
/ # ls -l /var/cache/apk/
total 1252
-rw-r--r-- 1 root root 752920 Dec 11 06:50 APKINDEX.adfa7ceb.tar.gz
-rw-r--r-- 1 root root 525738 Dec 11 06:50 APKINDEX.efaa1f73.tar.gz
또한 리포지토리는 아래 파일에 추가하여 추가 할 수 있습니다.
/ # cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/v3.8/main
http://dl-cdn.alpinelinux.org/alpine/v3.8/community
요약
도커의 이미지에 알파인을 잡을 때 아무것도 모르고 잡으면 빠지는 것 같습니다.
Alpine의 특성을 억제해 둘 필요가 있다고 하는 것이므로 조금이라도 알았으므로 좋았다고 생각했습니다.
VirtualBox에서 Alpine Linux를 구축해 보면 좋을까라고 생각했습니다.
덧붙여서 ash는 사용하기 어렵다고 생각해 버렸기 때문에 속공으로 bash를 인스톨 해 놀아 보고 있습니다.
최상의 사용법으로는 정확하지 않을 것 같습니다.
/ # apk add bash
(1/5) Installing ncurses-terminfo-base (6.1_p20180818-r1)
(2/5) Installing ncurses-terminfo (6.1_p20180818-r1)
(3/5) Installing ncurses-libs (6.1_p20180818-r1)
(4/5) Installing readline (7.0.003-r0)
(5/5) Installing bash (4.4.19-r1)
Executing bash-4.4.19-r1.post-install
Executing busybox-1.28.4-r1.trigger
OK: 13 MiB in 18 packages
/ # bash
bash-4.4#
참고 링크
◼ htps : // bg. s와 rm 또는 t. 이오 / 포 스트 / 엔 트리 / 아 l 피네 엔 트리 아 pk /
◼ htps : // 걸려. 하테나 bぉg. 코m/엔트리/2016/04/25/223909
Reference
이 문제에 관하여(초경량 Alpine Linux에 대해 조사했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryuichi1208/items/6020cfabc92bd8153654텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)