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 プロジェクトをデバッグする方法

推薦する

ボタンの 4 つのクリック応答方法の概要

ボタンは頻繁に使用されます。ここでは、イベント処理メソッドを整理し、実装方法が多数あることを発見しま...

3分でUbuntu 16.04を初期化し、Java、Maven、Docker環境をデプロイする

Fast-Linux プロジェクト アドレス: https://gitee.com/uitc/Fas...

エラー 2002 (HY000): ソケット '/tmp/mysql.sock' 経由でローカル MySQL サーバーに接続できません

エラーメッセージ:エラー 2002 (HY000): ソケット '/tmp/mysql.so...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

LNMP を展開して HTTPS サービスを有効にする方法に関するチュートリアル

LNMP とは: Linux+Nginx+Mysql+(php-fpm、php-mysql)つまり、...

Dockerのデフォルトネットワークセグメントを変更する実装方法の分析

背景同社のサーバーはすべて Alibaba Cloud ECS ホストを購入しています。デフォルトの...

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

Linuxプロセス通信におけるFIFOの実装

FIFO通信(先入れ先出し)関連のないプロセス間の通信を可能にする FIFO 名前付きパイプ。パイプ...

フロントエンドパフォーマンス最適化に関する補足記事

序文私は、Web サイトのフロントエンド パフォーマンス最適化のための JavaScript と C...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

React Hooksの使用例

目次簡単なコンポーネントの例より複雑な親子コンポーネントのケースオンセレクトの書き方反応する子供Re...

Vueはスクロールロードテーブルを実装します

目次成果を達成する転がり荷重知識備蓄コンポーネントのパッケージ1. コンポーネントの命名2. 小道具...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Linux でファイルの権限 (所有権) を変更する

Linux と Unix はマルチユーザー オペレーティング システムであるため、ファイルの権限と所...