docker build 時の apt install が遅い問題 (docker build の --add-host オプションを使って APT のパッケージリポジトリを国内ミラーに設定できる)
こんにちは、Docker ビルドおじさんです。
今日ずっと docker build してる (してない)
— Nobuoka Yu (@nobuoka) 2019年3月22日
ubuntu:18.04
ベースで Dockerfile を書いてビルドしまくってるのですが、apt install
がとにかく遅い!!! なぜなら日本に住んでいるから!! archive.ubuntu.com が遠い!!!
Dockerfile に追記せずに apt で使うリポジトリを https://t.co/Skrw55Kyjw から国内のミラーに変える技みたいなのないんだろうか……
— Nobuoka Yu (@nobuoka) 2019年3月22日
解決方法
調べてみたらいろいろ解決策がありそうだった。
解決策 その 1
日本を出る。 archive.ubuntu.com の近くに行きましょう。
解決策 その 2
Dockerfile をいじって (一時的にでも) APT のパッケージリポジトリの URL を国内ミラーに変更する。 「apt docker 遅い」 みたいなキーワードで検索するとこの方法がひっかかる。
解決策 その 3
apt-cacher みたいなやつでキャッシュしたり、Squid による透過型プロキシでキャッシュしたりする。 わりとこれが素直な方法な気もするが、ちょっと大変そうな気もする。
解決策 その 4
この記事で共有したいのはこの方法。 docker build
コマンドの --add-host
オプションを使って APT のリポジトリのホスト名に対応する IP アドレスを書き換えちゃう方法。
そういう感じしかないのかなー、って思ってたんですが、調べてみたら `docker build` に `--add-host` オプションがあるからこれが使えるのでは?? ってなってます (試してみます) https://t.co/5nMTjn2efn
— Nobuoka Yu (@nobuoka) 2019年3月22日
例えば ubuntu:18.04
をベースとするイメージの場合、リポジトリのホスト名として archive.ubuntu.com などが使われていて、国内ミラーは jp.archive.ubuntu.com となっているので、nslookup jp.archive.ubuntu.com
で国内ミラーの IP アドレスを調べて、docker build --add-host="archive.ubuntu.com:xxx.xxx.xx.xx" .
という感じで国内ミラーの IP アドレスを指定してやると良さそう。
セキュリティ的なところはちょっと気になる。
まあセキュリティ的にはちょっと気になるところではありますよね。 手元で試行錯誤するときに apt install を早くしたい、みたいな時に設定すると良さそうです!
— Nobuoka Yu (@nobuoka) 2019年3月22日