誰にも見えないブログ

雑なメモ。まとまってない文章等

dockerチュートリアル4:imageを小さくするコツ,データの扱い等

https://docs.docker.com/develop/dev-best-practices/

  • imageを小さく保つ方法

    • base Imageはユースケースに近いものを選ぶ
      • 例えばJavaのcontainerを作りたい場合
        • 一般的なubuntuのimageではなくopenJDK公式のdokcer imageを使う
        • ubuntuのimageにJDKなどをinstallするDockerfileを書くべきではない
          • memo:ビルドの手間は省けると思うが、これがimageのサイズに関連してくる理由はよくわからない(書かれていない)
    • multistage buildを使う
      • 例:javaの場合:実行環境とビルド環境でコンテナを分ける
        • ビルド環境:maven image
        • 実行環境:tomcat image
      • ビルド環境には実行にしか必要になるようなものを含めず、実行環境にはビルドにしか必要になるようなものを含めない
    • RUNコマンドの数を最小限にし、image layerの数を減らす
      • runごとになにかオーバーヘッドのようなものがある?
        • なるべく&&などで連結し、ワンライナーのコマンドにすべき
          • 例:一行ずつRUN apt-getを書くのではなくRUN apt-get -y update && apt-get install -y pythonと書く。
    • 複数のコンテナを作る場合、共通化できるものをベースイメージとして用意する
      • FROM~でベースイメージをロードする
      • 例:production imageをベースにdebug imageを作る
    • タグを有効活用する
      • 自動で作成されるlatestを使うのではなく目的に合わせたタグを使う(prod,test等)
        • imageのサイズとは関係ないような???
  • アプリケーションのデータをどう扱うか

    • storage deriver,volume,bind mountという3つの選択肢がある
      • アプリの永続データとしてはvolume機能が推奨
      • storage driver経由の書き込み可能レイヤーへの保存は非推奨
      • バインドマウントは開発中の利用が効果的である
        • 本番では利用を最小限に留めるべき?な感じがした(弊社エンジニアなどとの雑談から受けた印象)