Docker 基本チュートリアル: Dockerfile 構文の詳細な説明

Docker 基本チュートリアル: Dockerfile 構文の詳細な説明

序文

Dockerfile は Docker プログラムによって解釈されるスクリプトです。Dockerfile は 1 つ 1 つの命令で構成されており、各命令は Linux のコマンドに対応しています。 Docker プログラムは、これらの Dockerfile 命令を実際の Linux コマンドに変換します。 Dockerfile には独自の記述形式とサポートされているコマンドがあります。Docker プログラムは Makefile と同様に、これらのコマンド間の依存関係を解決します。 Docker プログラムは Dockerfile を読み取り、指示に従ってカスタマイズされたイメージを生成します。イメージのようなブラックボックスと比較すると、Dockerfile のようなわかりやすいスクリプトは、イメージがどのように生成されるかを明確に示しているため、ユーザーに受け入れられやすくなります。 Dockerfile を使用すると、独自の追加要件をカスタマイズする必要がある場合、Dockerfile に指示を追加または変更してイメージを再生成するだけで済み、コマンドを入力する手間が省けます。

Dockerfileで使用されるコマンドは

から

FROM はベースイメージを指定します。通常、使用可能な Dockerfile では最初の命令として FROM が必要です。画像に関しては、既存の適切な画像ミラーであれば何でも構いません。

FROM は Dockerfile 内の最初の非コメント命令である必要があります。

混合イメージの作成を容易にするために、FROM は Dockerfile 内に複数回出現することができます。

タグが指定されていない場合は、使用するベースイメージのバージョンとして最新のものが使用されます。

メンテナー

画像メーカーを指定するための情報はこちら

走る

RUN コマンドは、現在のイメージ内の有効なコマンドを実行し、実行結果を送信します。コマンドが実行されて送信されると、Dockerfile 内の次の命令が自動的に実行されます。

階層的な RUN 命令と生成されたコミットは、Docker のコアコンセプトに沿っています。バージョン管理と同様に、いつでもイメージ イメージのカスタム ビルドが可能になります。

RUN 命令キャッシュは、次のコマンドが実行されても自動的に無効化されません。たとえば、RUN apt-get dist-upgrade -y のキャッシュは次のコマンドに使用される場合があります。--no-cache フラグを使用すると、キャッシュを強制的に無効にすることができます。

環境

ENV 命令を使用して、Docker コンテナの環境変数を設定できます。

ENV によって設定された環境変数は、docker inspect コマンドを使用して表示できます。環境変数を変更するには、docker run --env <key>=<value> を使用することもできます。

ユーザー

USER は、実行中の所有者 ID を切り替えるために使用されます。 Docker はデフォルトで root を使用しますが、必要がない場合は別のユーザーに切り替えることをお勧めします。結局のところ、root には権限が大きすぎるため、使用するにはセキュリティ上のリスクがあります。

ワークディレクトリ

WORKDIR は作業ディレクトリを切り替えるために使用されます。 Docker のデフォルトの作業ディレクトリは / です。ディレクトリを切り替える cd コマンドを実行できるのは RUN のみであり、現在の RUN に対してのみ機能するため、各 RUN は独立して実行されます。他の命令を指定されたディレクトリで実行したい場合は、WORKDIR に依存する必要があります。 WORKDIR アクションによって行われたディレクトリの変更は永続的であるため、各コマンドの前に WORKDIR を使用する必要はありません。

コピー

COPY は、コンテナ内のパス <src> からパス <dest> にファイルをコピーします。

<ソース>

ソース フォルダー内のファイルまたはディレクトリ、またはリモート URL である必要があります。

ターゲット コンテナ内の絶対パスです。

すべての新しいファイルとフォルダーは、UID と GID を使用して作成されます。実際、<src> がリモート ファイル URL の場合、ターゲット ファイルの権限は 600 になります。

追加

ADD は、コンテナ内のパス <src> からパス <dest> にファイルをコピーします。

<src> は、ソース フォルダー内のファイルまたはディレクトリ、またはリモート URL である必要があります。 <dest> は宛先コンテナ内の絶対パスです。

すべての新しいファイルとフォルダーには UID と GID が作成されます。実際、<src> がリモート ファイル URL の場合、ターゲット ファイルの権限は 600 になります。

音量

ローカル ホストまたは他のコンテナーからマウントできるマウント ポイントを作成します。通常、これは、維持する必要があるデータベースやデータを保存するために使用されます。

さらす

EXPOSE 命令は、Docker が許可した場合に指定されたポートを転送することを指定します。

CMDF

Dockerfile には CMD 命令が 1 つだけ存在できます。 複数の CMD コマンドを指定した場合、最後のコマンドが有効になります。

CMD 命令の主な機能は、デフォルトの実行コンテナを提供することです。これらのデフォルトには実行可能ファイルを含めることも、実行可能ファイルを省略することもできます。

シェルまたはexec形式を使用する場合、CMD

このコマンドは自動的に実行されます。

オンビルド

ONBUILD の機能は、イメージのビルド時に、FROM を使用する次の Dockerfile が実行されるまで命令の実行を遅延することです。遅延は 1 回に制限されます。

ONBUILD の使用シナリオは、最新のソース コードを取得し (RUN を使用)、イメージをビルドするときにシステム フレームワークを制限することです。

ARGB

ARG は、Docker バージョン 1.9 で追加された新しいコマンドです。

ARG で定義された変数は、イメージが作成された時のみ有効です。作成が完了すると、変数は無効になり、消えます。

ラベル

イメージ タグ Owner を定義し、変数 Name の値と等しい値を割り当てます。 (ラベル所有者=$Name)

エントリーポイント

Docker イメージがインスタンス (つまり、Docker コンテナ) として実行されるときに実行されるコマンドまたはファイルを指定します。

知らせ:

CMD と ENTRYPOINT はどちらも実行を開始するプログラムを指定するために使用でき、両方のコマンドには 2 つの異なる構文があります。

コマンドls -l

または

コマンド ["ls",''-l"]

最初の構文の場合、Docker はコマンドに「/bin/sh –c」を自動的に追加するため、予期しない動作が発生する可能性があります。この動作を回避するには、すべての CMD と ENTRYPOINT で 2 番目の構文を使用することをお勧めします。

両方を使用する場合は、必ず意味を理解してください。一般的に言えば、両方を使用する必要があるのは、ENTRYPOINT が実行するバイナリを指定し、CMD が実行のデフォルト パラメータを指定する場合のみです。

  • 可能な限りコマンドを組み合わせる

Dockerfile 内の各コマンドは新しいレイヤーを作成しますが、コンテナーが持つことができるレイヤーの最大数には制限があります。したがって、論理的に一貫性のあるコマンドを可能な限りマージすることで、レイヤーの数を減らすことができます。コマンドをマージする方法としては、マージ可能な複数のコマンド (EXPOSE、ENV、VOLUME、COPY) をマージする方法などがあります。

Dockerfile 内の各コマンドは新しいレイヤーを作成しますが、コンテナーが持つことができるレイヤーの最大数には制限があります。したがって、論理的に一貫性のあるコマンドを可能な限りマージすると、レイヤーの数を減らすことができ、コンパイルの速度も向上します。

組み合わせ可能な複数のコマンド (RUN、EXPOSE、ENV、VOLUME、COPY) を組み合わせます。例:

エクソイーズ80
エクソイズ8080
コマンド cd /tmp
コマンドls

==>

エグゾイーズ80 8080
コマンド cd /tmp && ls

ADD コマンドと COPY コマンドは、ほぼ同じ機能を持ちます。ただし、COPY セマンティクスの方が直接的であるため、可能な場合は常に COPY コマンドを使用することをお勧めします。唯一の例外は、ADD コマンドには独自の解凍機能があることです。ファイルをイメージにコピーして解凍する必要がある場合は、ADD コマンドを使用できます。それ以外の場合は、COPY コマンドを使用することをお勧めします。

1.1.1.100:1234/jdk-8u74-linux-x64.tar.gz /usr/local/ を追加します。
  • ユーザーの使用

デフォルトでは、すべての Docker アプリケーションはコンテナのルート ユーザーの下で実行されますが、これにより潜在的なセキュリティ リスクが発生します。実稼働環境で実行されるコンテナは、USER コマンドを使用して、権限のないユーザーで実行するのが最適です。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Dockerfile における ENV 命令の具体的な使用法の詳細な説明
  • Dockerfile echoは、指定されたファイル内の複数行のテキストを実装する方法を指定します。
  • Dockerfileの指示と基本構造の説明
  • alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装
  • Dockerfileを使用して独自のイメージを作成する方法
  • Dockerfile を使用して Docker でイメージを構築する方法
  • Dockerfile を使用して Java ランタイム環境のミラーを作成する方法
  • Dockerfile の一般的なコマンドの概要
  • Dockerfile テキストファイルの使用例の分析

<<:  CentOS の MySQL に MariaDB をインストールするときに発生する方法と問題

>>:  Webstorm と Chrome を使用して Vue プロジェクトをデバッグする方法

推薦する

CSS で順序付きリスト項目と順序なしリスト項目のスタイルを設定する方法

順序なしリストでは、順序なしリストのシンボルは各リストの前に表示されるドットです。順序付きリスト o...

js 配列から重複を削除する 11 の方法

実際の業務や面接では、「配列の重複排除」の問題によく遭遇します。以下は、js を使用して実装された配...

DockerToolBox ファイルマウント実装コード

docker を使用すると、ファイルをマウントできない場合があります。これは、仮想マシンの共有フォル...

WeChatアプレットに2048ミニゲームを実装する詳細なプロセス

レンダリング サンプルコード今日は、WeChat アプレットを使用して 2048 ゲームを実装します...

Windows 10 無料インストール版の MySQL インストールと設定のチュートリアル

ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

Linux で so または実行可能プログラムの依存ライブラリを表示します

Linux で実行可能プログラムまたは so の依存ライブラリを表示します。 Linux の実行可能...

DockerはホストのMysql操作に接続します

今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...

MySQL 5.6 zipパッケージのインストールチュートリアルの詳細

これまでは、拡張子が .msi のファイル、つまり、完全なインストールが使用されていました。しかし、...

NGINXがウェブサイトのPV、UV、独立IPをカウントする方法の詳細な説明

Nginx: PV、UV、独立IPウェブサイトを作成する人なら誰でも、ウェブサイトのPV、UV、その...

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

uniappは録音アップロード機能を実現

目次uni-app の紹介HTML部分js部分インスタンスを作成する録音を開始録音終了録音を再生再生...

MySQLトリガーの使用

目次1. トリガーの紹介1. トリガーとは何ですか? 2. トリガーの特徴2. トリガーを作成する1...

Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信

関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...