Slide 1

Slide 1 text

Part3 ベースイメージの選び方 1

Slide 2

Slide 2 text

ベースイメージとは • Dockerのコンテナイメージは、イメージレイヤーの集合体。 • 変更内容をレイヤーという単位で管理。 • ミルフィーユのように、レイヤーを重ね合わせたものが最終的なイメージ。 • どのようなイメージも、土台となるイメージを出発点としている。 • これをベースイメージと呼ぶ。 • ビルドしたイメージ = ベースイメージに独自の変更レイヤーを重ねたもの。 2

Slide 3

Slide 3 text

ベースイメージとは 3 FROM ubuntu:22.04 ← ubuntu:22.04のイメージをベースにする RUN apt update ← apt updateを実行 RUN apt instal -y hello ← apt install –y helloを実行 COPY example.txt /work/ ← example.txtを/workディレクトリへコピー Dockerfileの例 Ubuntu:22.04 apt update apt install –y hello COPY example.txt ビルド ベースイメージ 独自の変更レイヤー ビルドされたイメージ ビルドの出発点として、ここに何を選択するかが問題

Slide 4

Slide 4 text

信頼できるイメージを使う • 公開されているコンテナであれば、どのようなものでもベースにできる。 • DockerHubなどの公開レジストリからイメージを取得するのが基本。 • だがDockerHubは、誰でも自由にイメージをアップロードできる。 • ただし、そのイメージは本当に使っても大丈夫なの? • メンテナンスされてる? • セキュリティ対策は? • マルウェアが仕込まれてたりしない? • どこの誰が作ったかもわからないイメージを使うのは危険。 • マルウェアのインストールを隠蔽した、罠イメージを作ることも可能。 • 信頼できるイメージを厳選して使おう。 4

Slide 5

Slide 5 text

信頼できるイメージとは • ベースイメージの中身を精査できれば理想だが、そんなコストは払えない。 • つまり究極的には、信頼できる人が作ったイメージかどうかで判断。 • じゃあ信頼できる人って誰? • DockerHubのTrusted Contentなら安心。 • Docker Official Image • Verified Publisher • Sponsored OSS • ここにリストされているイメージを出発点にすることをまず検討しよう。 • UbuntuやAlpineといったOS • MySQLやPostgreSQLなどのミドルウェア • GoやPythonといった言語などのオフィシャルなイメージが存在する • 用途に合わせてこれらの中から選ぼう 5

Slide 6

Slide 6 text

イメージのサイズを意識する • 効率的な実運用のためには、イメージのサイズも重要。 • Ubuntuなどの汎用イメージをベースに独自カスタマイズをするより、 用途に合わせたベースを選択する方がいい。 • Alpineのような、軽量をウリにしているOSを検討してもいい。 • ただしglibcがmuslになってるなど、仕様の違いには注意。 • 軽量なアプリ実行環境が欲しいなら、distrolessを検討してみよう。 6

Slide 7

Slide 7 text

イメージを自作する • ありもののイメージがどうしてもダメであれば、ゼロから自作もアリ。 • ただしメンテナンスコストをすべて自分で負担する必要がある。 • Ubuntuであれば、debootstrapを使ってユーザーランドを自作して、コ ンテナとしてインポートすることが可能。 • 運用コスト削減のためには、独自カスタマイズは最小限にするのが鉄則。 • あくまで最後の手段と心得よう。 7

Slide 8

Slide 8 text

まとめ • セキュリティを意識して、信頼できる人の作ったイメージのみを使おう。 • よくわからない野良イメージの拾い食いダメ絶対。 • イメージのサイズに気を配ろう。 • ベースOSを変えたり、不要なツールやライブラリのないイメージを使うなど。 • 自作も不可能ではない。 • ただしあまりオススメはしない。 8