Gentoo distccd Docker
Posted: | Categories: Gentoo | Tags: distcc, docker, Gentoo
背景
Gentoo の Docker イメージが作りたい。が、
- オフィシャルの gentoo/stage3-amd64 の更新頻度が低い( 2021/08/08 時点で以前のアップデートが 1 年前だった )
- portage 用のイメージ gentoo/portageがあり、こちらは毎日更新されている。
- コマンドや glibc などが置かれているビルド済みの領域は gentoo/stage3-amd64 に置かれているため、実際に使うときには emerge –update –deep –newuse @world とリビルドが必要
- リビルドするとイメージのサイズがかなり増える
が、できればコンパクトなイメージにしたい。
結論(2021/08/17 時点)
docker-slimを使ってイメージをコンパクトにする方法が一番コンパクトになった。
| 手法 | サイズ | 備考 |
|---|---|---|
| ダウンサイジング前 | 3.04GB | |
| 不要なディレクトリの削除 | 1.8GB | emerge が一時的に使うファイル郡 |
| (上記ディレクトリ削除に加えて)不要なパッケージの削除 | 983MB | パッケージ一覧を見ながら不要そうなパッケージを削除 |
| docker-slim | 39MB |
Dockerfile サンプル
手法の比較
不要なディレクトリ削除は emerge が一時的に使うファイル郡を削除するだけなので安全に使える。
不要なパッケージの削除だが、これはパッケージ名の変更やパッケージ同士の依存関係の変更があると 必須ではないが、都度 Dockerfile の修正が必要になり長期間の運用を考えると、運用コストが上がる。
docker-slim を使った方法が一番コンパクトになった。ただ docker-slim は必要なファイルを動的に解析して必要なファイルのみを残すので、解析できるように準備する必要がある。
portage 用のイメージ gentoo/portageを使った方が良いのか?
RUN emerge –sync でも同様な事はできるので… と思ったが、毎回 emerge –sync に時間が取られるのは無駄。 もし「Docker のキャッシュで古い状態でビルドされるのが嫌だ」という場合でも、キャッシュを使わないオプションで docker build すれば最新の状態でビルドできる。
Read more...