Dockerfileベストプラクティス(A)

では、「ドッカー展開あなたの最初のアプリケーション、」1我々はDockerfileミラーを構築するために使用されてきたが、この1はDockerfile頻繁に使用するコマンドを補完します。

Dockerfile最佳实è・μ(€中)


ドッカー画像はDockerfile命令フェッチすることによって生成することができます。Dockerfileは、ユーザーは、ミラーリング操作上のすべての命令はDockerfileファイルに書き込むことができ、最終的にドッキングウィンドウのビルドを使用して、ミラーを構築するために、テキストファイルです。

では、「ドッカー展開あなたの最初のアプリケーション、」私たちはコマンド「ドッキングウィンドウのイメージビルド-tブリテン:1.0」を使用し、ドッカー画像ビルドコマンドをDockerfileし、指定されたコンテキストを読み取って画像を構築するために、コマンドの最後にあります。「」のポイントは、ポイントは、コンテキストイメージを構築することです。

コンテキストを再帰的に処理されます。したがって、即ちこのコンテキスト内のすべてのサブディレクトリを含みます。

ミラーリングはなくCLIによるよりも、完成されたドッカーデーモン(ドッカーデーモン)で構成されています。最初に行うべきことは、全体の文脈が(再帰的に)デーモンに送信されたビルドプロセスです。コンテキストが開始され、Dockerfileディレクトリに格納されているように、ほとんどの場合、それは空のディレクトリから好ましいです。目的のファイルDockerfileを生成するだけで追加します。

注:DOは、それはデーモンドッカーにすべてのファイルのルートディレクトリの下に「/」を開催しますので、あなたは開発環境を確認するには、次のコマンドを実行しようとすることができ、例えば、コンテキストルートとして次のコマンドを「/」を使用しません。

#ドッキングウィンドウのイメージビルド/

ミラーにパッケージのビルドや構造物の文脈でのプロファイルにCOPYコマンドDockerfileで使用することができます。ファイルやディレクトリを除外するために、ディレクトリのコンテキストで.dockerignoreファイルを追加することで、パフォーマンスを向上させるには建物。典型的には、ルートコンテキストに位置Dockerfile、ファイルシステム内のフラグ-fドッカービルドがどこドッカーファイルを指定することができ、例えば、ミラー及びVLANタグを構築-tフラグ倉庫を使用して指定することができます。

#猫>を/ tmp / CentOSの<< EOF 
CentOSのFROM:最新
MAINTAINER [email protected] 
EOF 
#ドッカイメージビルド-f / tmpに/ CentOSのCentOSの-t:v0.1の。
#ドッキングウィンドウの画像

リポジトリタグ画像のID CREATED SIZE

220メガバイト前にCentOSのv0.1の7eab7b4cc6eaは38秒

あなたはまた、例えば、複数の倉庫ビルドミラーやタグを指定することができます。

#ドッキングウィンドウのイメージビルド-f / tmpに/ CentOSの-t T01 / CentOSの:v0.1の-t T02 / CentOSの:v0.2デベロッパー。
#ドッキングウィンドウの画像

リポジトリタグ画像のID CREATED SIZE

220メガバイト前にCentOSのv0.1の7eab7b4cc6eaは3分

T01 / CentOSのv0.1の7eab7b4cc6ea 3分前に220メガバイト

T02 / CentOSのv0.2デベロッパー7eab7b4cc6ea 3分前に220メガバイト

注:(あなたがドッカハブで、またはそうでなければ、あなたのアカウントにプッシュされている場合を除く)倉庫やタグの現在の意味は、現在のホストであり、他のホスト上で、あなたはこれらのミラーを得ることができない、フォローアップは、ドッキングウィンドウの話されます私たちの良いリモート・ミラーリングを共有するための民間倉庫レジストリまたはHarobor。

次のようにミラーリングの手順を使用して構築Dockerfileが要約されています。

1、こうした掲示板アプリなどの画像、用のディレクトリを作成します

2は、ディレクトリとファイルの完全なDockerfileの下に作成、掲示板-appディレクトリに書き込ま

3、またはコードイメージファイルが必要掲示板アプリのディレクトリにコピーされ

不要なファイルが掲示板-appディレクトリの下に構築されているがある場合4、あなたは、不要なファイルを無視するファイルと書き込み.dockerignoreを作成することができます

図5は、ブリテンボードアプリドッカー画像ビルドディレクトリコマンドで実行され、位置のコンテキストを指定します。「」、このようなコマンドとして「ドッカー画像構築-tテスト/ブリテン。」

命令実行のDockerfile前ドッカーデーモンは、最初Dockerfile初期検証を実行し、構文が間違っている場合は、パラメータが間違っている場合は、関連するエラーが返され、例えば、ターゲットディレクトリは、命令の実行まで、チェックされない存在しません。エラーをスローします。

ドッカーが個別に命令実行のDockerfileデーモン、必要に応じて、新しいイメージに新しい画像IDの最終的な出力を各命令の結果を提出します。ドッカーデーモンが自動的に送信するようにコンテキストをクリーンアップします。

したがって、次の命令に影響を及ぼさないであろう指にコマンドを実行し、その命令のそれぞれが独立して実行されることに注意してください。

可能な限り、中間画像ドッカーが大幅構築プロセスドッカーをスピードアップするために(キャッシュ)を再利用すること。コンソールでキャッシュと意志出力メッセージを使用します。

デモ:

#猫> Dockerfile << EOF 
高山FROM:3.2 
MAINTAINER [email protected] 
RUNのAPK更新&& APK socatに関する&&のrm -rの/ var /キャッシュ/追加
CMDのenv | グレップ_tcp = | (SEDの/.*_ PORT _ \([0-9] * \)_ TCP = TCP:\ / \ / \(* \):\(* \)/ socatに関する-t 100000000 TCP4は、LISTEN:\ 1 、フォーク、REUSEADDRのTCP4:\ 2 \ 3 \&/」&&エコー待ち)| SH 
EOF

最初の建物

#ドッキングウィンドウのビルド-tデモ/デモ:v0.1の。

ドッカーデーモン2.048kBにビルドコンテキストを送信

ステップ1/4:高山FROM:3.2

3.2:ライブラリから引っ張る/アルペン

95f5ecd24e43:プル完全な

ダイジェスト:SHA256:ddac200f3ebc9902fb8cfcd599f41feb2151f1118929da21bcef57dc276975f9

ステータス:高山のための新しいイメージをダウンロード:3.2

---> 98f5f2d17bd1

ステップ2/4:メンテナ[email protected]

---> fa3786732ad5での実行

中間容器を取り外すfa3786732ad5

---> 6f5007fa547d

ステップ3/4:RUNのAPK更新&& APK追加socatに関する&&のrm -rの/ var /キャッシュ/

---> b157222691fbでの実行

フェッチhttp://dl-cdn.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gzを

g10ee65f-v3.2.3-474 [ http://dl-cdn.alpinelinux.org/alpine/v3.2/main ]

OK:利用できる5294個の異なるパッケージ

(1/4)の取り付けのncurses-terminfoのベース(5.9)

(2/4)のインストールのncurses-LIBS(5.9)

(3/4)のインストールのreadline(6.3.008)

(4/4)のインストールsocatに関する(1.7.3.0)

busyboxの-1.23.2.triggerを実行

OK:19のパッケージで7のMIB

中間容器のb157222691fbを削除します

---> 58c5258280f7

ステップ4/4:CMDのENV | グレップ_tcp = | (SEDの/.*_ PORT _ \([0-9] * \)_ TCP = TCP:\ / \ / \(* \):\(* \)/ socatに関する-t 100000000 TCP4は、LISTEN:\ 1 、フォーク、REUSEADDRのTCP4:\ 2 \ 3 \&/」&&エコー待ち)| SH

---> ca843dd16f02での実行

中間容器のca843dd16f02を削除します

---> 7bf06f4ab80b

正常にビルド7bf06f4ab80b

成功裏にタグ付けされたデモ/デモ:v0.1の

2番目の建物

#ドッキングウィンドウのビルド-tデモ/デモ:v0.2デベロッパー。

ドッカーデーモン2.048kBにビルドコンテキストを送信

ステップ1/4:高山FROM:3.2

---> 98f5f2d17bd1

ステップ2/4:メンテナ[email protected]

--->キャッシュを使用します

---> 6f5007fa547d

ステップ3/4:RUNのAPK更新&& APK追加socatに関する&&のrm -rの/ var /キャッシュ/

--->キャッシュを使用します

---> 58c5258280f7

ステップ4/4:CMDのENV | グレップ_tcp = | (SEDの/.*_ PORT _ \([0-9] * \)_ TCP = TCP:\ / \ / \(* \):\(* \)/ socatに関する-t 100000000 TCP4は、LISTEN:\ 1 、フォーク、REUSEADDRのTCP4:\ 2 \ 3 \&/」&&エコー待ち)| SH

--->キャッシュを使用します

---> 7bf06f4ab80b

正常にビルド7bf06f4ab80b

成功裏にタグ付けされたデモ/デモ:v0.2デベロッパー

親チェーンを有するミラー以外のローカルキャッシュを生成します。これはまた、キャッシュ・ミラーリングは、前世代によって構築、または画像全体鎖がドッカー負荷ロード可能であるれることを意味します。あなたはミラーキャッシュを指定する必要がある場合は、オプションから--cacheを使用することができます。親チェーンを持っている必要はありません指定されたミラーから--cacheを使用して、あなたは別の倉庫から引き出すことができます。

(例えば:Harobor)構築が完了した後、倉庫の遠位端にプッシュローカルリポジトリに格納された画像を考えることができます

BuildKit

バージョン18.09以降では、ドッカーは、新しいビルドツールbuildkit、モービー/ buildkitプロジェクト(サポートhttps://github.com/moby/buildkit)を。既存のインプリメンテーションツールと比較すると、BuildKitは、多くの機能を提供します。

1、構築及びスキップ実行ステージ検出未使用

2、独立した建物相の並列化

3、ビルドファイル転送中のコンテキストでのみ増分変更

4、および検出の文脈で使用されていないファイルの送信をスキップ

5、多くの新機能は、外Dockerfileを実装しました

6、APIの残りの部分(中間ミラーおよび容器)の副作用を回避するため

7、自動トリムとセット優先順位を生成キャッシュ

BuildKitを使用するには、ドッキングウィンドウのビルドDOCKER_BUILDKIT = 1を呼び出す前に、CLIコマンドの環境変数を設定します。

BuildKit Dockerfile構文構造に基づいて使用することができます実験を理解するために、BuildKitのドキュメント(参照https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md)を。

Dockerfileコマンドの構文

Dockerfile命令は、大文字と小文字を区別しません。しかし、条約は、簡単にパラメータ領域と区別するために作るために、大文字にあります。

順次ドッカーDockerfile演算命令。冒頭にコマンド「FROM」Dockerfile必見。もちろん、グローバルパラメータ前と命令から注釈付き。命令から親画像を指定します。ARG FROM前列Dockerfileからパラメーターを宣言する1つまたは複数の命令を用います。

ドッカー行はコメントとして#で始まります。

1、ミラーFROM:ラベル

例えば、各ミラーイメージを作成することは命令から必要で、画像の作成に基づいて(基本的な)新しいイメージを指定します。

CentOSのFROM:最新

2、MAINTAINER名/メール

個人情報を守る、など:

MAINTAINER [email protected]

3、ADDのソースファイルに新しいイメージディレクトリ

ADD命令は自動的例えば、タール、TGZパッケージを抽出します、所属Dockerfileのあるディレクトリに新しいイメージ、ソースファイルを作成するために、ソースファイルをコピーします。

ADDのexample.tgz /データ

図4に示すように、コピー元の宛先ディレクトリ

ソーステキストは、新しいイメージ、ソースファイルにコピーされ、Dockerfileは同じディレクトリに属し、ADDと似たような:

COPYのsources.listのは/ etc / aptの

5、ENVキー値

変数やなどの環境変数を、設定します。

ENV fooの/ var / www / htmlと設定

fooの/ var / www / htmlと設定を表す変数の値

6、RUNコマンド

以下のようなソフトウェアパッケージを、インストール時にコマンドを実行し、ミラーリング、および新しいイメージに提出するために、既存のに基づいて、通常実行します。

RUN YUM sysstatのインストール-y

7、WORKDIRディレクトリ

以降のコマンドRUNにWORKDIR、Dockerfileを設定することにより、作業ディレクトリ、作業ディレクトリを指定して、CMD、ENTRYPOINT、ADD、COPYコマンドは、デフォルトのパス以降のログオンコンテナベースのミラーリングがWORKDIRで、ディレクトリ内で実行されています。

8、ポート番号を公開

ドッカー指定ポートがミラー操作からコンテナを開いたときに、例えば:

80を公開

9、ボリュームマウントポイント

マウントポイントは、例えば、設定されたミラー操作からドッカーコンテナ:

VOLUME /データ

10、CMD [ "実行するプログラム"、 "パラメータ1"、 "パラメータ2"]

あなたは/ binに/ bashのを使用している場合、それはCMDでコマンドまたはスクリプトコンテナあなたが実行を開始、唯一のCMDコマンドDockerfile、多くがある場合は、最後の実行、ほかにドッカrunコマンドを実行するためにカバーされます。例えば:

CMD [ "/bin/bash","/root/start.sh"]

例ショー

Dockerfileを作成します。1.

#mdkirデモ
#CDのデモ
#猫> Dockerfile << EOF 
#My最初の画像
のubuntu FROM:最新
MAINTAINER [email protected] 
ENV fooの/ var / www / htmlと設定
WORKDIR $ {FOO} 
$ fooというcode.tgz ADD 
COPYのsources.listをの/ etc / aptの
COPYのstart.sh /ルート/ 
RUNがchmodは755 /root/start.sh 
RUNのMKDIR /データ
VOLUME /データは
RUN apt-getを-y更新&& apt-getを-yのnet-tools lsofをsysstatのインストールのvimのbash procpsの
RUNをapt-getの-y apache2のインストール
RUN LN -fsを/ usr / share / zoneinfoの/アジア/上海の/ etc / localtimeの
RUN日
COPYのports.conf /etc/apache2/ports.confの
ADDのexample.tgz /データは
80 EXPOSE  
CMDを[」 /bin/bash","/root/start.sh "]
EOFを

以下のような構成で使用される関連するスクリプトDockerfileです。

#猫>のsources.list << EOF 
のdebはhttp://mirrors.aliyun.com/ubuntu/バイオニック主な制限された宇宙はマルチバース
DEBはhttp://mirrors.aliyun.com/ubuntu/バイオニック・セキュリティ主な制限された宇宙は多次元宇宙
のdebをのhttp: //mirrors.aliyun.com/ubuntu/バイオニック・更新が主な制限された宇宙はマルチバース
DEBはhttp://mirrors.aliyun.com/ubuntu/主な制限された宇宙はマルチバースバイオニック・提案
DEBをhttp://mirrors.aliyun.com/ubuntu/バイオニック-backportsのが主な制限された宇宙は多次元宇宙
のdeb-srcのhttp://mirrors.aliyun.com/ubuntu/バイオニック主な制限された宇宙は多次元宇宙 
のdeb-srcの主な制限された宇宙はマルチバースhttp://mirrors.aliyun.com/ubuntu/バイオニック・セキュリティ
DEBを-src http://mirrors.aliyun.com/ubuntu/主な制限された宇宙は、バイオニック、更新マルチバース
のdeb-srcのhttp://mirrors.aliyun.com/ubuntu/バイオニック・提案主な制限された宇宙は多元
DEBを-src http://mirrors.aliyun.com/ubuntu/バイオニック-backportsの主な制限された宇宙の多元 
EOFの
#猫> ports.conf << EOF 
ServerNameがlocalhostの
80を聴く
<のIfModule ssl_module> 
443聞く
</のIfModule> 
<のIfModule mod_gnutlsを。 C> 
443聞く
</のIfModule> 
EOF 
#猫> start.sh << EOF 
#!/ binに/ bashが
apache2ctl開始
bashの
EOFを

2、ミラーDockerfileを構築することにより、

#ドッキングウィンドウのイメージビルド-tテスト/ httpdの:v0.1の。
#ドッキングウィンドウの画像

リポジトリタグ画像のID CREATED SIZE

165メガバイト前にテスト/ httpdのv0.1の9a9a2b7dd312 2分

httpdの最新2ae34abc2ed0 3週間前に165メガバイト

図3に示すように、容器ベースのミラーリングの動作

#ドッキングウィンドウコンテナの実行-idt -p 80 --name test_httpd01テスト/ httpdの:v0.1の

6e7a40ec63b618bf043b45d334c289df782f02e19617dc0686c3be41a582e047

注:コンテナを作成するとDoが、それ以外の場合は、Apacheサービスが開始されませんCMDをカバーにつながる、/ binに/ bashのを追加しません。

4、リスニングステートのコンテナ港そのステータスと確認を表示

#ドッキングウィンドウのps -a

STATUSポートの名称を作成したコンテナのIDイメージコマンド

a919ee33ae0eテスト/ httpdの:v0.1の "/ binに/ bashを/ルート/駅..." 3分の最大3分前0.0.0.0:32787->80/tcp test_httpd01

#ドッキングウィンドウのexec -it test_httpd01 netstatの-antp

アクティブなインターネット接続(サーバと確立)

原Recv関数 - Q送る-Qローカルアドレス外国住所州PID /プログラム名

TCP 0 0 0.0.0.0:80 0.0.0.0:* 18 / apache2のをLISTEN

5、テスト

#カールhttp://127.0.0.1:32787

こんにちは

6、コンテナやミラー、コンテナのライフサイクルの終わりを削除

#ドッキングウィンドウ停止test_httpd01 
#ドッキングウィンドウRM test_httpd01 
#ドッカRMI $(ドッカ画像| grepを"テスト/ httpdの" | awkは'{$ 3印刷}')


概要
特定のLinuxベースの子供用の靴のために、書き込みDockerfileは比較的簡単ですが、それでも、このようなADD、COPYコマンド差、RUN CMDコマンドとの違いなどいくつかの詳細に注意を払う必要があります。

おすすめ

転載: blog.51cto.com/firefly222/2461831