2017-02-17 14 views
0

私は基本イメージをロードFROM句、MySQLのDockerfileインサイドdockerはrunコマンドを2回ビルドしますか? Dockerfileで

FROM mysql:5.7 

のようなものを言うてきた、それはapt-getの更新のようなコマンドを実行しますが、なぜ私が理解していないことです自分のDockerfileでFROM文の後にapt-get updateを実行する必要がありますか? apt-getを実行するまでは後続のコマンドが失敗するため、apt-get updateを実行する必要があることは分かっていますが、FROMイメージがすでにこれらのコマンドを実行していると思いますか?

答えて

0

Dockerfile for mysqlを見ると、あなたはいくつかのRUNコマンドに次のようなパターンが表示されます:

RUN apt-get update \ 
&& apt-get install -y --no-install-recommends \ 
     ca-certificates \ 
     wget \ 
&& rm -rf /var/lib/apt/lists/* 

最初の行は、パッケージリポジトリの現在の状態を収集し、その後、インストールが実行され、最後に、パッケージレポ状態がファイルシステムから削除されます。画像層に肥大化を防ぐために、同じrunコマンドで不要なファイルをクリーンアップ

  1. :これは二つの問題を防ぐためにbest practices from Dockerに従っています。
  2. 最終的に古くなってエラーが発生するキャッシュデータを削除すると、キャッシュデータは失効した時点で再利用する必要があります。

apt-get updateapt-get installから2つの別々のRUNコマンドで区切ります。ドッカーがレイヤーをどのようにキャッシュするかによって、apt-get updateコマンドが以前実行されたコマンドと同じ場合、ドッカーはキャッシュされた結果を再利用します。 apt-get installコマンドを変更して別のパッケージを組み込むと、キャッシュされた更新コマンドがパッケージリポジトリに存在しなくなったイメージを指しているため、イメージのビルドに失敗することがあります。

関連する問題