前回の記事「Docker (II): Dockerfile の使い方入門」では、Dockerfile の使い方を紹介しました。この記事では、引き続き Dockerfile を理解し、さまざまな Dockerfile コマンドの使用方法を学習します。 Dockerfile の手順の説明 1 FROMはベースイメージを指定します FROM 命令は、後で新しいイメージを構築するために使用されるベース イメージを指定するために使用されます。 FROM 命令は Dockerfile ファイルの最初のコマンドである必要があります。ビルド プロセスを開始すると、Docker はこのイメージに基づいて新しいイメージをビルドし、FROM 以降のコマンドもこのベース イメージに基づいて実行されます。
FROM の構文形式は次のとおりです。
または
または
FROM で指定するイメージは、任意の有効なベース イメージにすることができます。 FROM には次の制限があります。
2 RUN コマンドを実行する イメージ構築プロセス中に特定のコマンドを実行し、中間イメージを生成します。形式:
3 コピー ファイルをコピーする 形式:
RUN 命令と同様に、コマンド ラインに似た形式と関数呼び出しに似た形式の 2 つがあります。 COPY 命令は、ビルド コンテキスト ディレクトリの <ソース パス> にあるファイル/ディレクトリを、イメージの新しいレイヤーの <宛先パス> の場所にコピーします。例えば:
<ソース パス> は複数指定することも、ワイルドカードを使用することもできます。ワイルドカード ルールは、次のような Go の filepath.Match ルールを満たす必要があります。
<ターゲット パス> は、コンテナー内の絶対パスまたは作業ディレクトリへの相対パスにすることができます (作業ディレクトリは WORKDIR 命令を使用して指定できます)。ターゲットパスを事前に作成する必要はありません。ディレクトリが存在しない場合は、ファイルをコピーする前に作成されます。 また、COPY コマンドを使用する場合、ソース ファイルのさまざまなメタデータが保持されることにも注意が必要です。たとえば、読み取り、書き込み、実行権限、ファイルの変更時間などです。この機能は、イメージのカスタマイズに役立ちます。特にビルド関連のファイルが Git を使用して管理されている場合。 4 より高度なファイルコピーを追加 ADD 命令と COPY 命令の形式とプロパティは基本的に同じです。ただし、COPY に基づいていくつかの機能が追加されます。たとえば、<source path> は URL になります。この場合、Docker エンジンはこのリンクのファイルをダウンロードし、<destination path> に配置しようとします。 イメージをビルドするときは、コンテキスト内のファイルを次の形式でイメージにコピーします。
知らせ Docker はファイルの内容が変更されたことを検出すると、後続の命令ではキャッシュを使用しなくなります。ファイルをコピーする際に処理が必要な/については、基本的には通常のコピーと同じです。 5 ENVは環境変数を設定します 形式は 2 つあります。
この命令は非常に単純で、環境変数を設定するだけです。 RUN などの後続の命令でも、実行時のアプリケーションでも、ここで定義された環境変数を直接使用できます。
この例では、行を折り返し、二重引用符を使用してスペースを含む値を囲む方法を示しています。これは、シェルでの動作と一致しています。 6 公開する コンテナが実行時にリッスンできるように、ビルドされたイメージのリッスン ポートを設定します。形式:
EXPOSE 命令は、コンテナにホストのポートをリッスンさせません。必要に応じて、docker を実行するときに -p または -P パラメータを使用して、コンテナ ポートをホストのポートに公開する必要があります。 7 VOLUMEは匿名ボリュームを定義する VOLUME はマウント ポイントを作成するために使用されます。つまり、ビルドされたイメージに基づいて作成されたコンテナーにボリュームを追加します。 ボリューム ["/data"] ボリュームは、ユニオン ファイル システムをバイパスして、1 つ以上のコンテナー内の指定されたディレクトリに存在でき、次の機能があります。
VOLUME を使用すると、ソース コード、データ、またはその他のコンテンツをイメージにコミットせずにイメージに追加し、複数のコンテナー間でこのコンテンツを共有できるようになります。 8 WORKDIRは作業ディレクトリを指定する WORKDIR はコンテナ内の作業ディレクトリを設定するために使用されます。
WORKDIR を通じて作業ディレクトリを設定すると、Dockerfile 内の後続のコマンド RUN、CMD、ENTRYPOINT、ADD、COPY およびその他のコマンドがこのディレクトリで実行されます。たとえば、WORKDIR を使用して作業ディレクトリを設定します。
上記の例では、pwd は最終的に /a/b/c ディレクトリで実行されます。 docker run を使用してコンテナを実行する場合、-w パラメータを使用して、ビルド中に設定された作業ディレクトリを上書きできます。 9 USERは現在のユーザーを指定します USER は、イメージを実行するために使用するユーザーを指定するために使用されます。
USER を使用してユーザーを指定する場合、ユーザー名、UID、GID、またはこれら 2 つの組み合わせを使用できます。以下はすべて法定指定テストです。
USER を使用してユーザーを指定した後、Dockerfile 内の後続のコマンド RUN、CMD、および ENTRYPOINT ではこのユーザーが使用されます。イメージがビルドされた後、docker run を介してコンテナを実行するときに、-u パラメータを使用して指定したユーザーを上書きできます。 10 CM CMD は、コンテナの起動時に実行されるコマンドを指定するために使用されます。 CMD には次の 3 つの形式があります。
実行可能ファイルの exec 形式を省略します。この書き方では、CMD 内のパラメータが ENTRYPOINT のデフォルト パラメータになります。この場合、ENTRYPOINT も exec 形式にする必要があります。 ENTRYPOINT との具体的な組み合わせについては、ENTRYPOINT を参照してください。 知らせ RUN 命令との違い: RUN はビルド中に実行され、新しいイメージを生成しますが、CMD はコンテナの実行中に実行され、ビルド中に操作は実行されません。 11 エントリーポイント ENTRYPOINT は、コンテナの実行可能プログラムを構成するために使用されます。つまり、イメージを使用してコンテナを作成するたびに、ENTRYPOINT で指定されたプログラムがデフォルトのプログラムとして設定されます。 ENTRYPOINT には次の 2 つの形式があります。
ENTRYPOINT は CMD と非常によく似ていますが、docker run によって実行されるコマンドは ENTRYPOINT を上書きせず、docker run コマンドで指定されたパラメーターは ENTRYPOINT に再度パラメーターとして渡される点が異なります。 Dockerfile では ENTRYPOINT コマンドは 1 つだけ許可されます。複数の ENTRYPOINT コマンドが指定された場合、以前の設定は上書きされ、最後の ENTRYPOINT 命令のみが実行されます。 docker run がコンテナを実行するときに指定されたパラメータは ENTRYPOINT に渡され、CMD コマンドで指定されたパラメータを上書きします。たとえば、docker run <image> -d を実行すると、-d パラメータがエントリポイントに渡されます。 docker run --entrypoint を使用して、ENTRYPOINT エントリ ポイントをオーバーライドすることもできます。たとえば、コンテナ実行プログラムは次のように指定できます。
完全なビルドコード:
docker build を使用してイメージをビルドし、イメージを itbilu/test として指定します。
ビルドが完了したら、itbilu/test を使用してコンテナを起動します。
コンテナを実行するときに、-g "daemon off;" を使用しました。これは ENTRYPOINT に渡されます。コンテナ内で最終的に実行されるコマンドは、/usr/sbin/nginx -g "daemon off;" です。 12 ラベル LABEL は画像にメタデータを追加するために使用されます。メタデータはキーと値のペアの形式で指定されます。
LABEL を使用してメタデータを指定する場合、1 つの LABEL 仕様で 1 つ以上のメタデータを指定できます。複数のメタデータを指定する場合、異なるメタデータはスペースで区切られます。中間画像が大量に生成されるのを避けるため、すべてのメタデータを LABEL 命令で指定することをお勧めします。たとえば、LABEL を通じてメタデータを指定します。 LABEL version="1.0" description="これは Web サーバーです" by="IT notes" 指定したら、docker inspect で確認できます。
13 アルゼンチン ARG は、ビルド ランタイムに渡される変数を指定するために使用されます。
たとえば、ARG を通じて 2 つの変数を指定します。
上記では、site と builduser の 2 つの変数を指定しています。builduser はデフォルト値を指定します。 docker build を使用してイメージをビルドする場合、--build-arg <varname>=<value> パラメータを使用してこれらの変数の値を指定またはリセットできます。
このようにして、サイトが itbilu.com に設定される itbilu/test イメージを構築します。 build_user が指定されていないため、その値はデフォルト値の IT Records になります。 14 オンビルド ONBUILD はミラー トリガーを設定するために使用されます。
ビルドされたイメージが他のイメージのベースイメージとして使用される場合、イメージ内のトリガーはキーによってトリガーされます。たとえば、画像を使用する場合、何らかの処理が必要になることがあります。
15 停止信号 STOPSIGNAL は、コンテナを停止するために送信されるシステム コール シグナルを設定するために使用されます。
使用されるシグナルは、SIGKILL など、カーネル システム コール テーブル内の有効な値である必要があります。 16 シェル SHELL は、コマンドの実行に使用されるデフォルトのシェル タイプ (シェル スタイル) を設定するために使用されます。
SHELL は Windows 環境でより便利です。 Windows では通常、cmd と powershell の 2 つのシェルがあり、sh もある場合があります。このとき、SHELL を使用して、使用するシェルの種類を指定できます。
Dockerfileの経験 Dockerfileの例 Nginx 動作環境の構築
Tomcat環境の構築 Dockerファイル
tomcat7.sh コマンド ファイル
原則と推奨事項 容器は軽量です。イメージから生成されるコンテナは、可能な限り軽量で、短時間で停止、破棄、再生成、置換できる必要があります。 .gitignore を使用してください。ほとんどの場合、Dockerfile はビルドに必要なファイルと同じディレクトリに配置されます。ビルドのパフォーマンスを向上させるには、.gitignore を使用して不要なファイルとディレクトリを除外する必要があります。 イメージと依存関係のサイズを削減するには、必要なパッケージのみをインストールします。 コンテナは 1 つのことを行います。すべてを 1 つのコンテナーで実行するのではなく、複雑なアプリケーションを複数のコンテナーに分離します。たとえば、Python Web アプリケーションでは、サーバー、DB、キャッシュ、MQ、ログなどの複数のコンテナーが必要になる場合があります。より極端な言い方をすると、コンテナごとに 1 つのプロセスです。 ミラーリングされたレイヤーの数を減らします。複数のラベル、ENV、その他のタグを使用しないでください。 特に apt-get install -y を使用してパッケージをインストールする場合は、継続行のパラメータをアルファベット順に並べ替えます。 ビルド キャッシュを使用します。キャッシュを使用しない場合は、ビルド時に --no-cache=true パラメータを使用して、中間イメージの再生成を強制することができます。 【この記事は51CTOコラムニスト「ピュアスマイル」によるオリジナル記事です。転載の許可を得るには、WeChat公式アカウントを通じて著者に連絡してください] この著者の他の記事を読むにはここをクリックしてください |
<<: マイクロソフトの Mixed Reality がハノーバーメッセでその実力を披露
>>: Office365: パートナーがWin-Winの未来を実現できるよう支援
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...
周知のとおり、SEO はウェブサイトの運用と保守の手段であり、その費用対効果の高さから多くの運用と保...
Vagex の登録受付が開始されました。公式 Web サイト (http://vagex.com/)...
百度は6月22日と6月28日にウェブサイトランキングの大規模なアップデートを実施した。このアップデー...
今日の企業が直面している最も差し迫った課題の 1 つは、最先端のテクノロジーと目標達成に役立つ実用的...
今日は、大学のパブリックアカウントのチーム構築、運用、プロモーション戦略を分析します。大学生起業家の...
テクノロジーの発展に伴い、クラウド ホスティングの時代は徐々にクラウド ネイティブへと進化してきまし...
概要:クラウド ネイティブ セキュリティは本当に違うのでしょうか?それは必須ですか?私の答えは「はい...
最近では、さまざまなウェブマスターのウェブサイトやSEOグループなど、誰もが7月18日に始まったクリ...
ウェブサイトの最適化は独創性と切り離せないことは多くの人が知っています。しかし、十分なオリジナリティ...
faconhostは香港VPSシリーズを新たに発売しました。デフォルトの帯域幅は100Mbpsです(...
今年上半期のスマート端末市場の動向についてお話しします。 QuestMobileのデータによると、市...
以前、クラスメートがH3CのCASクラウドプラットフォームを使用して仮想マシンを作成したとき、クラウ...
Hostsolutions はノルウェーにデータセンターを新たに開設し、大容量ハードドライブ VPS...
moecloud は正式に UK cn2 gia vps の販売を開始しました。データセンターはロン...