元の記事を参照してください-http://bjbsair.com/2020-03-22/tech-info/5550/
鏡の中にパッケージされているものの使用の可能性 - Dockerfileは、画像の建物のプロセスを簡素化し、このプロセスはバージョン管理することができますが、ミラーを構築するために、人々の多くの時間が、衝動があります。このような不適切な使用はDockerfile多くの問題につながることができます:
- ドッキングウィンドウミラーすぎ。あなたは、多くの場合、ミラーまたはミラーの建物を使用する場合は、大きな鏡のようなものに遭遇し、さらにいくつかは2G以上に達することができます
- ドッキングウィンドウのミラー構築が長すぎます。各ビルドは、これは大きな問題になる可能性(例えばユニットテストなど)が頻繁にビルドイメージのために長い時間がかかります
- 努力の重複。複数のミラーリングされた建物の間にあるコンテンツの多くは、まったく同じ繰り返しですが、それぞれの時間は、時間とリソースを浪費し、再びそれをしなければなりません
私は読者がドッキングウィンドウミラーのいくつかを理解していることを願って、知識の少なくとも前提の必要性については、この記事をお読みください。
- ドッカーは、容器を貫通する、基本的な概念を理解します
- 鏡の階層構造を知るミラーの基本に精通しドッカー、
- 最高のは、(自分の鏡像を作成するために、ドッキングウィンドウのビルドコマンドを使用します)ドッカミラーを構築するための責任があります
Dockerfileとイメージ構築
Dockerfileは一つの命令、ミラーの最終層に対応する命令から構成されています。各行の最初の単語を使用すると、公式ドキュメントを参照することができコマンド文字列のすべては、このコマンドのパラメータに続いて、Dockerfile支援とその使用上のコマンドは、ここではそれらを繰り返さないということです。
ドッキングウィンドウのビルドコマンドを実行すると、以下のように、全体の建設プロセスは以下のとおりです。
- ドッキングウィンドウデーモンにファイルを送信Dockerfileを読み込み
- ドッキングウィンドウデーモンに送信され、現在のディレクトリ(コンテキスト)内のすべてのファイルを、読みます
- 構造に対応するパラメータを指定してコマンドに処理、分析のためにDockerfile
- コマンドのすべてを次のループでは、呼処理は、各コマンド処理機能に対応します
- 各コマンドは、(FROM除く)一つの容器中で実施され、新しいイメージの実行の結果が生成されます
- 最終的な生成された画像にラベルを付けます
Dockerfileを書くためのベストプラクティスの一部
- 統一ベースイメージを使用し
================
いくつかの記事は、このようなようにbusyboxのか、高山やなどの基本イメージの使用を促進するためにできる限り小さく最適化イメージに話をします。私は、基本画像は一度だけダウンロードする必要が共有することができ、あまりにも多くのストレージスペースが無駄になってしまうことはありませんので、そのようなUbuntuの、CentOSの、などとして、我々はよりよく知っている統一ベースイメージを使用することをお勧めします。その利点は、これらの生態系のミラーリングされた、より完全な、簡単な問題をデバッグするために加えて、当社のソフトウェアをインストールすることです。
- 静的および動的な分離
=======
そして、それは頻繁に分離するように変更することの基本的な内容は変更されません、基礎となる内容の変化が少ないが、上部ミラーのためのさまざまな基礎を使用して作成します。たとえば、あなたはさまざまな言語で基本イメージを作成することができ、python2.7、python3.4、go1.7、java7というように、これらの画像は、最も基本的な言語のライブラリが含まれている、各グループは、上記のビルドアプリケーションレベルの画像に続けることができます。
- 最小の原則:だけ必要なものをインストールします。
================
多くの人々は、ミラーを構築する場合は、衝動がある-使用する可能性のあるものは、鏡の中にパッケージされています。このアイデアを抑制するために、ミラーがなければならないだけで必要なもの含める、または内部に入れていないがあってもなくてもよいものを。ミラーが拡大しやすく、実行時間コンテナが非常に簡単に変更することもあるので。可能な限り小さく、可能な限り迅速に構築するときに、だけでなく、として、ミラーが速く伝送、より経済的なネットワーク資源の未来を確保することをこれが保証されます。
- 原則:各画像は唯一の機能である
==================
コンテナ異なる機能で複数のプロセスを実行しないでください、各ミラーは唯一のソフトウェアパッケージをインストールし、アプリケーションを提出、あなたは(特性kubernetesが提供)またはコンテナのネットワークとの間でポッドを介して通信するためのプログラムと対話する必要があります。モジュラー、異なるアプリケーションがメンテナンスを分離し、アップグレード、単一鏡の小型化を図ることができることをこれが保証されます。
- 少ない層を使用して
=========
それは読んで理解しやすいいくつかのコマンドで書かれた、分離しようとする異なるコマンドを見えますが。しかし、これは、多くのミラー層の出現につながる、と硬いミラーを管理し、分析するために、ミラー層が限られています。関連する可能な限り同一の層に、分割改行は、画像サイズをさらに小さくすることができるように、コンテンツ、および容易な視聴履歴用画像。
RUN apt-get update\
&& apt-get install -y --no-install-recommends \
bzr \
cvs \
git \
mercurial \
subversion \
&& apt get clean
复制代码
- 各層の含有量を低減
==========
インストールが内容だけに、このプロセスはまた、追加コンテンツや一時ファイルを生成することが必要がありますが、私たちは、それぞれのインストールが最小限に抑えられる何かをしようとしなければなりません。
- 例えば、使用して--no-installを-をお勧めパラメータは、推奨インストールしないことをapt-getのパッケージを伝えます
- 、明確に/ var / lib / apt /リスト/キャッシュパッケージをインストールした後
- 中間ファイルを削除します。たとえば、圧縮されたパッケージをダウンロード
- 削除一時ファイル:コマンドが一時ファイルを作成するだけでなく、タイムリーに削除した場合
- でDockerfileでのみファイルのアクセス権を変更しないでください
============================
ドッキングウィンドウの画像を重ねているので、すべての変更がうまくとして、ファイルやディレクトリのパーミッションを変更するレイヤーを追加します。大きな権限単一のファイルやディレクトリを変更するためのコマンドがある場合は、簡単に大きな鏡につながることができ、これらの文書のコピーを置きます。
溶液のいずれか、シンプルでユーザー権限を追加し、これらの変更を行うために容器にDockerfile前にファイルセット、またはスタートアップスクリプト(エントリポイント)を入れ、またはコピーファイルや変更の権限は、最終的にのみ増加した(一緒に入れません層)。
- 建設速度をスピードアップするために使用したキャッシュ
===================
ドッカー層がすでに存在している見つけた場合、それは直接層がすでに存在して使用すると、再び実行されません。ビルド複数回ドッカー継続的に実行する場合は、2番目の実行がすぐに終わったでしょう。
しかし、機能をキャッシュの連想ストレージ効果の導入につながった1.10のリリースから、今そのキャッシュを使用して手動でミラーを指定するパラメータから--cacheを導入。
- バージョン管理および自動ビルド
============
自動的にミラーを作成することができ、一緒に入れて、対応するアプリケーションコードのバージョン管理することが好ましいDockerfile。利点は、あなたが戻って全体をデバッグし、ロールのために、違い何異なるミラーを理解しやすい、ミラーの各バージョンの内容を追跡することができるということです。
誰でも簡単にミラーを使用して、代わりの画像をダウンロードする文書を参照することができますので、あなたがミラーパラメータや環境変数を実行している場合また、多くのですが、また、対応する命令を与え、ドキュメント、およびドキュメントはDockerfileの変更に更新されます私が使用する方法がわかりません。