5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerイメージのビルドの際にはapt-get updateの結果がキャッシュされないようにしよう

Posted at

事象

aptパッケージをDockerfileに追加してビルドするとエラーが出た

RUN apt-get update
RUN apt-get install -y build-essential ~~some_packeges~~ vim ← vimを追加した
E: Failed to fetch http://deb.debian.org/debian-security/pool/updates/main/libk/libksba/libksba8_1.3.5-2+deb10u1_amd64.deb  404  Not Found [IP: 151.101.110.132 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

以下から探してみると確かに存在しない
http://security.debian.org/debian-security/

エラーメッセージによるとapt-get updateするか--fix-missingオプションをつければいいらしい

が、Dockerfileではすでにapt-get updateしている

原因

apt-get updateの結果がキャッシュされていたため、すでに存在しない古いパッケージをインストールしようとしていたのが原因

Step 3/32 : RUN apt-get update
---> Using cache

今まではインストールするパッケージ一覧に変更がなかったため、apt-get installにおいてもキャッシュを使っていたので問題にならなかったが、今回はvimを追加したため、Dockerがキャッシュを使わずにインストールしようとする
にも関わらず、apt-get updateの結果は引き続きキャッシュを使うので、古いパッケージを探しにいった結果当該パッケージが見つからずにエラーになったようだ

解決

apt-get updateapt-get installを同一のRUNで行うようにDockerfileを以下のように修正

RUN apt-get update \
  && apt-get install -y build-essential ~~some_packeges~~ vim

これでapt-get installの内容に変更があるとapt-get updateもキャッシュを破棄して実行するようになる
毎回キャッシュを破棄するとビルド時間が悪化するので、変更があったときだけキャッシュを破棄するようにした

Dockerイメージのビルドキャッシュの効率的利用や軽量化、高速化については突き詰めだすと際限がないので、最終的なイメージサイズ、ビルド時間が許容範囲であれば、属人化しないように可読性を優先すべきだと思うこの頃です

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?