$30 off During Our Annual Pro Sale. View Details »

Docker Imageについてほんの少しだけ詳しくなれるかも知れない話

i-whammy
July 08, 2022

Docker Imageについてほんの少しだけ詳しくなれるかも知れない話

社内LTで発表した内容を社外向けに編集しています。

i-whammy

July 08, 2022
Tweet

More Decks by i-whammy

Other Decks in Technology

Transcript

  1. 目的 • Docker Imageのtagについてる -slim, -bullseyeみたいなやつが何なのかなんとなくわかるようになる • 前よりほんの強めに目的意識を持ってDocker Imageを選択できるようになる ◦

    ちょっと前の自分のように、なんとなくImageを選んでた人に視点を提供したい ◦ 結果的にパイプライン実行時間やリードタイムの短縮とかに繋がると嬉しい • LTとかあんまりしたことないので練習したかった ◦ 対戦よろしくお願いします
  2. そもそも • Docker Imageが関係する「時間」にはいくつか種類がある ◦ docker pull にかかる時間 ▪ baseとなるDocker

    Imageのsize、レイテンシ、キャッシュの有無等に依存する ▪ 今回の話のメインはここ ◦ docker push にかかる時間 ▪ 成果物のDocker Imageのsize、レイテンシ、キャッシュの有無などに依存する ◦ docker build にかかる時間 ▪ build時に実行される処理内容、ビルド環境のスペック等に依存する ◦ docker run にかかる時間 ▪ run時に実行される処理内容、実行環境のスペック等に依存する
  3. いろいろなDocker Image • 標準 ◦ latest
 ◦ 所謂「フルイメージ」「full distribution」 ◦

    Clojureの場合、最新のDebianのstable releaseをベースにしている
  4. いろいろなDocker Image • Debianベース ◦ それぞれのバージョンの開発コード名が付与されている ▪ bullseye(Debian 11), buster(Debian

    10), stretch(Debian 9), jessie(Debian 8) ▪ Debianベースにするなら、最新のstableを使いましょう(2022/7/7現在ならbullseye) ◦ 軽量版 ▪ slim
 ▪ フルイメージの下位互換, UbuntuやDebianをベースにした最小限 ▪ 使用頻度の高いパッケージのみに削ぎ落とされている
  5. いろいろなDocker Image • Alpine Linuxベース ◦ alpine
 ▪ 超軽量 ▪

    いくつか留意すべき点あり • Windowsベース ◦ windowsservercore
 ◦ nanoserver

  6. いろいろなDocker Image(おまけ) • Distroless ◦ https://github.com/GoogleContainerTools/distroless ◦ "Distroless" images contain

    only your application and its runtime dependencies. They do not contain package managers, shells or any other programs you would expect to find in a standard Linux distribution. ◦ アプリケーション実行に必要な最小限のもののみに絞り込む事で軽量化、セキュアな実行環境を実現す る ◦ 但しパッケージマネージャーやシェルも入ってないので、デバッグが大変になる可能性がある
  7. Alpineってどうなんだい? • Docker公式にもAlpine使うと良いよって書いてある ◦ Whenever possible, use current official images

    as the basis for your images. We recommend the Alpine image as it is tightly controlled and small in size (currently under 6 MB), while still being a full Linux distribution. ◦ (雑訳)オフィシャルなイメージを使いましょう。Alpineはいいぞ。 • ただ以下のような考慮点もあるので、要所要所できちんと判断して使う方が良い ◦ bash, apt-get等, Ubuntuでは利用できるが、Alpineでは利用できないコマンドがある ◦ apkで利用可能なパッケージのバージョンが古いことがある ◦ Alpineが悪いというわけではありません
  8. 実際どのくらい違うの? • clojure(2022/7/7時点 linux/amd64)の場合 ◦ latest ... 357.38 MB ◦

    openjdk-17-bullseye ... 334.25 MB ◦ openjdk-17-slim-bullseye ... 268.28 MB ◦ openjdk-17-alpine ... 197.49 MB