Dockerのイメージビルド中でapt-getを高速化するたった1つの方法
はじめに
(追記)煽りタイトルが思っていたより反響があるのだなと思いました。
Dockerのイメージビルド処理は少しでも速い方が、試行錯誤にかかる時間を減らすことができます。
apt-get
にかかる時間が全体のそこそこの時間を占めているのでなんとかできないかと思いました。
検証環境
何も対処しない場合の処理時間
curl
と postgresql-client
が必要だったので、この2つをインストールしただけのイメージを作成してみます。
以下のような Dockerfile
を作成します。
この Dockerfile
を使ってイメージをビルドしてみます。
- 3回実行します。
- ログが大量に出力されるため、
before.log
というファイルにリダイレクトし捨てておきます。 time
コマンドでどのぐらいの処理時間がかかるのかを確認してみます。
ブレは大きいですが、平均すると 90.18s ほどの処理時間がかかっています。
高速化
apt-get
を高速化するための施策を実施します。
実は、 Dcoker に限らず、Debian系OSで apt-get
する場合全般に適用できる高速化になります。
以下のコマンドを実行し、 apt-get
で利用するパッケージダウンロード元のリポジトリを日本のサーバに変更します。
ネットワーク通信にかかる時間を減らすことが期待できます。
security.ubuntu.com
に関しては変更して良いものか判断つかず、ひとまずそのままにしました。
対処した場合の処理時間
1行だけ処理が増えて、以下のような Dockerfile
となりました。
先程と同様、3回実行してみます。
なんと 25.44s になりました。単純に 3倍以上 の速度改善となりました。
ひとこと
当面は日本リージョンでの稼働を考えた場合の高速化ですが、 Kubernetes の利用や海外展開などと絡めて考える必要はあります。
海外リージョンで実行した場合は逆に遅くなってしまいますね。 ( CI/CDサーバを海外リージョンに配置してビルドするようなケース )
その他 apt-fast
の速度も調査してみたい。
ディスカッション
コメント一覧
まだ、コメントがありません