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

推薦する

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...

Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...

CSS で透明なグラデーション効果を実装するためのサンプルコード

Zhihu Discovery コラムのタイトル画像は、通常、以下のように表示されます。明らかに、グ...

HTML 選択ボックスのプレースホルダーの作成に関する問題

テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...

カルーセルの制作方法を実現するjs

この記事では、カルーセル画像の表示を実現するためのjsの具体的なコードを参考までに共有します。具体的...

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginxを使用する目的Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者...

流星効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスで流星の特殊効果を表示するための具体的なコードを参考まで...

初心者がHTMLタグを学ぶ(3)

HTML に触れる初心者は、いくつかの HTML タグを学びます。関連記事:初心者が学ぶ HTML...

MySQL <> および <=> 演算子の紹介

<> 演算子機能: 等しくないことを示します。注: 「!=」演算子と同じ機能を持ちますが...

HTML の基本的な使用法には、リンク、スタイルシート、span、div などが含まれます。

1. リンクハイパーテキスト リンクは HTML において非常に重要です。基本的な形式は次のとおりで...

Linux gccコマンドの具体的な使い方

01. コマンドの概要gcc コマンドは、GNU がリリースした C/C++ ベースのコンパイラを使...

CSSのさまざまな背景、使用シナリオ、テクニックの詳細な分析

この記事はGitHub https://github.com/qq449245884/xiaozhi...

HTML の ReadOnly と Enabled の違い

ReadOnly 属性を持つ TextBox は、クライアント上で次のマークアップとして表示されます...

WeChatアプレット開発で遭遇したことのない落とし穴のまとめ

目次getApp()ページエントリファイルの先頭に変数を定義しますwx.createSelector...

TypeScript 2.0 マーク付き共用体型の詳細な説明

目次タグ付きユニオン型を使用した支払い方法の構築タグ付きユニオン型を使用した Redux アクション...