Best practices for writing Dockerfiles読んだメモ

docs.docker.com

何これ

  • Docker 公式ドキュメントにある Dockerfile の書き方のベストプラクティスがまとまっているページ
  • 巷に書いてあるような意識したいことや具体的なプラクティスがまとまっている
    • build context を理解しましょう、multi-stage buildを使いましょう、Dockerfile 命令の良い書き方 etc...
    • イメージサイズを小さくしたり、ビルドスピードを高速にしたりするプラクティスが目立つ
  • これまで雰囲気で Dockerfile を書いていたりプラクティスをつまみ食いしているだけの状態だったいので、改めて読んでみた

感想

  • build context について色々書かれていたのは発見
    • これまであまり意識していなかった
    • 確かにビルドサイズやスピードを抑えるために、必要なファイルしか見ないようにするのはその通り
    • セキュリティ的にも余分なファイルを加えないのは正しそう
  • 標準入力から docker build できるのは知らなかった
    • 1回限りのビルドや Dockerfile を保持し続けない場合などにいいらしい
    • 「ビルドコンテキストを省略すればもっと早いぞ!」みたいに書かれていたのは面白い
    • ただしサービス開発の場面で使えそうな時がパッと思い浮ばない
    • ツール的な使い方をするものだったら使いどころがあるのかも
    • git レポジトリなどをビルドコンテキストに出来る remote build context は使い道ありそう
  • ENTRYPOINT のコンテナ起動時にヘルパースクリプトを実行させるテクニックは使えそうで、覚えておきたい
    • 色々なイメージがこのやり方を使って機能を提供している*1*2ので、自分で使わなくても知っているとトラブルシュートの場面で役立ちそう
  • セキュリティのプラクティスがまとまっていないのは気になった
    • セキュリティの側面で書いてないだけな気もする
    • ビルドコンテキストを絞ったり、イメージサイズを減らしていくのはセキュリティの面からも良いプラクティスではあるだろう
    • とはいえ別の文書で当たった方がよさそうに思える
      • root を避けましょうとか書いてあるけど、あんまりハッキリ言ってなくて「あれれ?」といった感想を持った
    • 以前話題になっていたこの記事辺りがよいのだろうか

余談