プログラミングは芸術だ!

WEB系エンジニア 「プログラミングは芸術」を座右の銘として日々勉強中

Dockerでよく利用されているAlpineを調べた

はじめに

f:id:gamu1012:20210112184954p:plain

Dockerを使っていると、AlpineのイメージをベースにDockerfileを記述していくことがあるかと思います。

Alpineという存在、軽量らしいということは知っていても、いまいち正体が把握できていなかったので、Alpineについての情報をまとめます。

Alpineとは

C標準ライブラリとしてmusllibcを採用し、BusyBoxをベースに利用して構築されたLinuxディストリビューションです。

セキュリティ・シンプルさ・リソース効率を重視するユーザー向けに設計されており、コンテナのイメージがサイズが小さいのが特徴です。

Docker用のLinuxディストリビューションというわけではありません。

公式 Alpine Linux

musl.libc

BusyBox

軽量と言われているが本当なのか?

Alpineはイメージサイズが軽量というのが色々なところから聞こえてきますが、実際にサイズ比較を行ってみます。

※2021/01/06現在のlatestで検証

REPOSITORY     TAG      IMAGE ID       CREATED         SIZE
busybox        latest   a77dce18d0ec   7 days ago      1.24MB
alpine         latest   389fef711851   2 weeks ago     5.58MB
centos         latest   300e315adb2f   4 weeks ago     209MB
ubuntu         latest   f643c72bc252   5 weeks ago     72.9MB

もちろんAlpineのベースになっているBusyBoxが最軽量ですが、

メジャーなLinuxディストリビューションであるUbuntuCentOSに比べてAlpineが十分に軽量なのが確認できました。

なぜイメージが軽量だと嬉しいのか

一番はpull/pushが高速になる点だと考えています。

この点が下記に響いてくるため、生産性やサービスの安定につながるためです。

  • 開発時にビルドのトライアンドエラーを高速にできるか
  • CIの高速化
  • オートスケール時に高速にサービスインできるか

なぜAlpineが選ばれているのか

軽量が嬉しいのであればBusyBoxを利用したり、scratchで0から記述していくケースも考えられると思います。

ではなぜAlpineが選ばれているのでしょうか?

私はWEB関連の開発だとパッケージマネージャーの存在が大きいと思っています。

必要なものをそれぞれビルドするようなDockerfileは作成するのは骨が折れ、管理も大変になります。

Alpineにapkというパッケージマネージャーがあり、軽量と便利さのバランスがAlpineの採用に繋がっていると思っています。

また使っているユーザーが多いとメンテナンスが活発になり、情報も増え、さらにユーザーが増えていくという好循環が発生している点も大きいと思います。

もちろん他の軽量Linuxが向いてるケースもあると思いますし、、

Ubuntuも約73MBとそこまで大きくはないので、私もUbuntuのイメージを利用しているプロジェクトも多々あります。