Docker imageの種類・選び方
alpine,bullseye, buster, slim, stretch, jessie, slim-buster, windowsservercore, latest
などなど...
いろいろありすぎてわからないのでまとめる。
前提知識: Linuxディストリビューション
LinuxはOSの基本部分をベースに配布することができる。有名なものでは以下の奴らがいる。
- Alpine Linux
- Debian
- Slackware
- RedHat
- Enoch
- Arch
- Android
大きく分けて4つ
-
公式
-
2.7.4
や3.0
などversionのみ記載されているもの
-
-
Alpine Linux
- 軽量重視で作られたLinux distribution
- pythonなどでは速度が遅くなるなど非推奨な場合がある
-
apk
コマンドを使う - 軽量版のため必要なパッケージが足りない場合がある
-
Debian
- Linux distributionの一つ
- versionごとにコードネームがある
コードネーム version 読み方 bullseye v11 ブルズアイ buster v10 バスター stretch v9 ストレッチ jessie v8 ジェシー -
Windows
windowsサーバー専用の環境にしたい場合に使用する
Slimの有無
公式とDebian系にはSlimがついているものが用意されている。
Slimがついているイメージを使用すると使用頻度の低いパッケージは除外される。
イメージの選び方
公式パッケージを選ぶのは容量に制限が特になかったり、マルチステージビルドにすることで気にする必要性が減る場合などで使用するといい。
Alpine LinuxやSlimはサクッと環境を作りたい場合に良さそう。
参考記事
追記
安易にAlpine Linuxを使うのはやめた方が良さそう。(目的に合わせて使おうというだけ)
Alpine Linuxが軽量というイメージがついたのは2018年ごろの話らしく、今では別の軽量イメージもある。(例: distroless)
以下のようなdistrolessを推す記事もあるので十分に検討する価値がありそう。(shellがないなどのデメリットはある)shellを使えるようにするための手段としてBusyboxのimageを使うようにすると良さそう。shellを使いたい時だけこのイメージを使用してrunするとか。
BusyBoxとは
1~5MBのサイズでLinuxのほとんどのコマンドを使えるようにするためのツールらしい。(公式)
このBusyBoxのimageを含んだものをdistrolessは提供している。
例: gcr.io/distroless/nodejs:14-debug
Discussion