초경량 Alpine Linux에 대해 조사했습니다.

12403 단어 alpine도커


배경



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

좋은 웹페이지 즐겨찾기