はじめに
Dockerを使っていると、AlpineのイメージをベースにDockerfileを記述していくことがあるかと思います。
Alpineという存在、軽量らしいということは知っていても、いまいち正体が把握できていなかったので、Alpineについての情報をまとめます。
Alpineとは
C標準ライブラリとしてmusllibcを採用し、BusyBoxをベースに利用して構築されたLinuxディストリビューションです。
セキュリティ・シンプルさ・リソース効率を重視するユーザー向けに設計されており、コンテナのイメージがサイズが小さいのが特徴です。
Docker用のLinuxディストリビューションというわけではありません。
軽量と言われているが本当なのか?
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ディストリビューションであるUbuntuやCentOSに比べてAlpineが十分に軽量なのが確認できました。
なぜイメージが軽量だと嬉しいのか
一番はpull/pushが高速になる点だと考えています。
この点が下記に響いてくるため、生産性やサービスの安定につながるためです。
- 開発時にビルドのトライアンドエラーを高速にできるか
- CIの高速化
- オートスケール時に高速にサービスインできるか
なぜAlpineが選ばれているのか
軽量が嬉しいのであればBusyBoxを利用したり、scratchで0から記述していくケースも考えられると思います。
ではなぜAlpineが選ばれているのでしょうか?
私はWEB関連の開発だとパッケージマネージャーの存在が大きいと思っています。
必要なものをそれぞれビルドするようなDockerfileは作成するのは骨が折れ、管理も大変になります。
Alpineにapkというパッケージマネージャーがあり、軽量と便利さのバランスがAlpineの採用に繋がっていると思っています。
また使っているユーザーが多いとメンテナンスが活発になり、情報も増え、さらにユーザーが増えていくという好循環が発生している点も大きいと思います。
もちろん他の軽量Linuxが向いてるケースもあると思いますし、、
Ubuntuも約73MBとそこまで大きくはないので、私もUbuntuのイメージを利用しているプロジェクトも多々あります。