個人的にベースイメージとしての利用を検討したことがあるDockerイメージについて、それぞれの特徴を比較して選ぶために調べたことをまとめます。
TL;DR;
OS・イメージ毎に以下の点を考慮して、総合的に決める。
評価軸
- イメージの生い立ち
- 誰がどのようなフローで作ったイメージか
- セキュリティ
- 不要なパッケージの多さ、減らしやすさ
- 基本的には不要パッケージが少ないほど潜在的なAttack Surfaceが減る
- 脆弱性があることを検知できるか
- 脆弱性対応状況が公開されているか
- 何年セキュリティパッチが受けられるか
- 不要なパッケージの多さ、減らしやすさ
- Dockerイメージのサイズ
- 最小サイズ
- アプリの実行環境を整えるまでに必要な手数
- パッケージマネージャでインストールできるものの多さ、新しさ
- (場合によっては)有償サポートが受けられるか
- 開発者・運用者のそのOSに対する習熟度
- 企業なら、既に運用しているOSがあれば
評価例(人や企業によらない部分のみ)
CentOS
- 脆弱性対応状況が公開されているか
- (場合によっては)有償サポートが受けられるか
公式centosイメージ
DockerHub: https://hub.docker.com/_/centos/
GitHub: https://github.com/CentOS/sig-cloud-instance-images
- CentOS Projectによってメンテされている
- Docker Security Scanningで脆弱性情報を閲覧可能 https://hub.docker.com/r/library/centos/tags/
Debian
- 脆弱性対応状況が公開されているか
- (場合によっては)有償サポートが受けられるか
- 一応(失礼)各国に商用サポートを行っている方がいるらしいが・・・
Docker公式debianイメージ
DockerHub: https://hub.docker.com/_/debian/
GitHub: https://github.com/tianon/docker-brew-debian
- tianonさんとDebian開発者のpaultagさんによりメンテされている
- tianonさん(Tianon Graviさん)は、InfoSiftr社のSVP of Operations
- tianonさんはDocker公式ubuntuイメージのメンテナでもある
- Docker Security Scanningで脆弱性情報を閲覧可能 https://hub.docker.com/r/library/debian/tags/
minideb
- Bitnami社がメンテしている
- Debianからコンテナに不要なEssentialパッケージをいくつか削除したもの
- 「aptが使える最小のコンテナイメージ」を目指している
Ubuntu
- 脆弱性の存在や対応状況が公開されているか?
- (場合によっては)有償サポートが受けられるか
Docker公式ubuntuイメージ
DockerHub: https://hub.docker.com/_/ubuntu/
- イメージの生い立ち
- Ubuntu公式から提供されているrootfsのイメージをscratchにADDしたあと、少し修正を加えて作られたもの
- ビルドスクリプト一式はtianon/docker-brew-ubuntu-coreで公開されている
- 作者のTianon Graviさんは、InfoSiftr社のSVP of Operations
- 脆弱性があることを検知できるか?
- Docker Security Scanningによる検証結果がDockerHubで見られる
- Ubuntuはcoreos/clairがデフォルトで対応している
appcontainers/ubuntu
ブログ: http://www.appcontainers.com/appcontainersubuntuxenial/
DockerHub: https://hub.docker.com/r/appcontainers/ubuntu/
- 公式ubuntuイメージから記事に書かれている通り一部パッケージを削除して、export&loadしてレイヤーを一枚にしたもの
ubuntu-slim
Docker: gcr.io/google_containers/ubuntu-slim:0.3
GitHub: https://github.com/kubernetes/contrib/tree/master/images/ubuntu-slim
- 公式ubuntuイメージからコンテナOSとして不要なものを削除して、1レイヤーにしたもの
- 公式ubuntuイメージの半分ほどのサイズ
- 削除されたパッケージ
- 削除されたファイル
- Kubernetesコミュニティでメンテされている
- appcontainers/ubuntuより多くのパッケージが削除されているように見える(systemd等)
非公式のSnappy Ubuntu Core
ブログ1: http://andrea.corbellini.name/2015/03/25/running-ubuntu-snappy-inside-docker/
ブログ2: http://www.arvinep.com/2015/12/create-snappy-ubuntu-as-docker-image.html
- 公式ubuntuイメージなどと違って、Ubuntuからrootfsのアーカイブが提供されていないので色々苦労しているみたい