docker build でイメージを作成したら、予想を超えびっくりする程大きくなってしまいました。
運用に耐えられない程大きいのですが、この後コンテナを使ったテストなどが控えており、イメージのダイエットは平行して研究することとして、とりあえず出来るだけサイズダウンをして展開する必要に迫られたので、その際にとった方法を残しておきます。
イメージのサイズダウン
イメージのサイズダウンを行うために、意識しないといけない事はたくさんあるようですが、概ね下記3つくらいを意識しておけばそこそこ効果が出そうです。
- 複数のRUNコマンドを1行にまとめるなど、Dockerfileを頑張る。
- マルチステージビルドでビルド時しか使わない資材をイメージに持ち込まない。
- イメージのレイヤを統合して、肥大化したところをダイエットする。
この中で、Dockerfileを変更せずとも行える「イメージのレイヤを統合」することにしました。
イメージのレイヤを統合する
イメージのレイヤを統合したい場合は、docker build
に--squash
オプションをつけることで行われます。
ただし、これを行うとレイヤ構造であることのメリットが失われるので、コンテナの用途などを考えて採用するかを検討するのが良いと思います。
このオプションは、実験的に実装されたオプションらしく、使用するにはDockerデーモン起動時のパラメータでスイッチしないと使えません。
1. Dockerデーモンを--experimental
オプション付きで起動する
という事で、スイッチの方法です。
/lib/system/docker.service
のExecStart
の末尾に-s overlay --experimental
を付与して、Dockerデーモンを起動すればOKです。
2. docker build
を --squash
オプション付きで実施する
あとは、ビルド時のオプションを指定すればOKです。
docker build --squash=true