🐋

Docker imageの種類・選び方

2022/08/22に公開

alpine,bullseye, buster, slim, stretch, jessie, slim-buster, windowsservercore, latest
などなど...
いろいろありすぎてわからないのでまとめる。

前提知識: Linuxディストリビューション

LinuxはOSの基本部分をベースに配布することができる。有名なものでは以下の奴らがいる。

  • Alpine Linux
  • Debian
  • Slackware
  • RedHat
  • Enoch
  • Arch
  • Android

大きく分けて4つ

  • 公式

    • 2.7.43.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はサクッと環境を作りたい場合に良さそう。

参考記事
https://prograshi.com/platform/docker/docker-image-tags-difference/

追記

安易にAlpine Linuxを使うのはやめた方が良さそう。(目的に合わせて使おうというだけ)

https://blog.inductor.me/entry/alpine-not-recommended

Alpine Linuxが軽量というイメージがついたのは2018年ごろの話らしく、今では別の軽量イメージもある。(例: distroless

以下のようなdistrolessを推す記事もあるので十分に検討する価値がありそう。(shellがないなどのデメリットはある)shellを使えるようにするための手段としてBusyboxのimageを使うようにすると良さそう。shellを使いたい時だけこのイメージを使用してrunするとか。

https://qiita.com/t_katsumura/items/462e2ae6321a9b5e473e#distrolessはベストプラクティスか

BusyBoxとは

1~5MBのサイズでLinuxのほとんどのコマンドを使えるようにするためのツールらしい。(公式

このBusyBoxのimageを含んだものをdistrolessは提供している。

例: gcr.io/distroless/nodejs:14-debug

Discussion