2017-08-30 6 views
0

私はDockerコンテナの基本イメージとしてDebian:latestを使用しています。オペレーティングシステムのアップデートには、Dockerイメージを構築中に永久にかかる

問題はすべてのビルドで、私は永久にかかるOSパッケージを更新する必要があるということです。私がしていることは次のとおりです。

FROM debian:latest 

RUN apt-get update && apt-get install -y --force-yes --no-install-recommends nginx 

... 

apt-get update && apt-get installは永遠に続きます。これについて私は何をしますか?

+1

あなたはその行をキャッシュしないようにしていますか? – BMitch

+0

毎回イメージを削除します。しかし、それは新鮮ではなく、最新のパッケージアップデートをすべて含んでいないのはなぜですか?私は 'debian:latest'と言っていましたが、数ヶ月です=( –

+0

' apt-get update'はパッケージを更新しません;現在のパッケージリストをAPTリポジトリから取り出します。 "永遠に?" – jwodder

答えて

3

ドッカー画像は最小限で、基本画像を実行するための絶対的な必要性が含まれています。 Debianベースイメージの場合、パッケージレポキャッシュがないことを意味します。したがって、apt-get updateを実行すると、すべてのリポジトリから初めてパッケージリポジトリキャッシュがダウンロードされます。それらがパッケージレポキャッシュを含んでいた場合、パッケージ状態が数百万回になり、すぐに古くなってしまい、後で更新を行うことで縮小されるベースイメージが大きくなります。

実際のdebian:最新のイメージは、先月のコミットによって比較的よく維持されます。 https://hub.docker.com/_/debian/

イメージのビルド時間を短縮するため、毎回イメージを削除しないことをお勧めします。代わりに新しいビルドとタグを実行し、新しいイメージがビルドされたらdocker image prune --forceを実行して、以前のビルドからタグなしイメージを削除します。これにより、ドッカーは以前のイメージビルドからキャッシュを再利用できます。

また、あまり頻繁に更新されず、すべてのアプリケーションの前提条件がある独自のベースイメージを作成することもできます。他のイメージと同様に構築し、FROM debian:latestFROM your_base_imageに変更します。

イメージビルドでlatestを使用しないでください。代わりにFROM debian:9のようにして、debianのメジャーバージョンのアップデートでビルドが中断されないようにしてください。

1

各ビルドで画像を削除しないでください。 Dockerfileを変更して、もう一度ビルドしてください。 Dockerは「スマート」であり、変更されたラインからのみ変更されていないレイヤーを維持します。 (ドッキングウィンドウが自動的に作成される)は、この目的のために使用されている中間画像を簡単に、このコマンドで削除することができます:

docker rmi $(docker images -q -f dangling=true) 

あなたは、画像を削除しないでください、this.Rememberと多くの時間を節約できます。 Dockerfileを変更して、もう一度ビルドしてください。そして、すべての作業を終えた後、このコマンドとそれだけであなたが必要なすべてです。

もう一つの「コマンドを洗浄するために起動してもいいが」になります

docker volume prune -f 

しかし、この最後のコマンドは、画像に関連しない清掃の他の種類のです...コンテナにより集中です。

+0

残念ながら、私はこれを 'docker-compose'と一緒に使用して、githubへのコミット時にJenkinsのウェブサイト全体を再配布します。古い画像を完全に削除するほうが簡単です。しかし、debianのアップデート/アップグレードは永遠に必要です。 –

+0

ああ、わかりませんが、この情報だけで何が起きているのか分かりません。おそらくあなたはインストールを「ロック」して何か質問をするパッケージをインストールしているかもしれません。環境変数 'ENV DEBIAN_FRONTEND noninteractive'の前に設定してみてください。それを使用して、インストールは質問でハングアップしません。たぶんそれはあなたの問題を解決することができます、それは単なるアイデアです。 – OscarAkaElvis

関連する問題