dockerfileファイルの詳細説明(共通コマンド)

Dockerfile を作成するときは、次のベスト プラクティスを考慮してください。

  1. イメージ サイズを最小化する: 軽量のベース イメージを使用し、ビルド プロセス中に不要なレイヤーを最小限に抑えるようにしてください。

  2. キャッシュを賢く使用する: Docker はキャッシュされたレイヤーを再利用しようとするため、1 つのステップが変更されると、後続のステップでキャッシュが失われます。したがって、キャッシュを最大限に活用するには、頻繁に変更するステップを最後に配置します。

  3. 不要なファイルを削除する: イメージを構築するときに、不要なファイルとキャッシュを削除してイメージのサイズを削減します。

  4. セキュリティ: イメージ内のソフトウェア パッケージと構成が安全であり、適時に更新されていることを確認します。

  5. ドキュメント: Dockerfile にコメントとドキュメントを追加して、他の人がビルド プロセスを理解できるようにします。

Dockerfile を作成するときは、各コマンドの動作を理解することが重要です。関連する Dockerfile コマンドとその説明は次のとおりです。

  1. FROM :FROMこのコマンドはベース イメージ、つまりコンテナーを構築するイメージを指定します。これは Dockerfile の最初のコマンドであり、他の命令の前に指定する必要があります。例: FROM ubuntu:20.04Ubuntu 20.04 イメージに基づいて構築されていることを意味します。

  2. WORKDIR :WORKDIRこのコマンドは、コンテナ内でコマンドを実行するときのデフォルトのディレクトリである作業ディレクトリを設定するために使用されます。たとえば、WORKDIR /app作業ディレクトリを に設定します/app

  3. RUN :RUNコマンドはコンテナ内でコマンドを実行するために使用されます。ソフトウェア パッケージのインストール、環境の構成、その他の操作に使用できます。例: を実行しRUN apt-get update && apt-get install -y nginxコンテナ内でNginx をインストールします。apt-get updateapt-get install

  4. COPYおよびADD :COPYおよびADDコマンドは、ホストからコンテナー内にファイルをコピーするために使用されます。例:COPY app.py /app/ホスト上のapp.pyファイルを/app/コンテナ内のディレクトリにコピーします。

  5. EXPOSE :EXPOSEこのコマンドは、コンテナー内のリスニング ポートを宣言するために使用されます。これはポートをホストに自動的にマッピングしませんが、他の人がコンテナ内のポート構成を理解するのに役立ちます。例:EXPOSE 80コンテナがポート 80 でリッスンすることを宣言します。

  6. CMD :CMDコマンドは、コンテナーの起動時に実行されるコマンドを定義するために使用されます。通常、コンテナのデフォルトのコマンドを定義するために使用されます。例:スクリプトCMD ["python", "app.py"]を実行するデフォルトの起動コマンドを定義します。app.py

  7. ENTRYPOINT : CMDENTRYPOINT と同様に、ENTRYPOINTcommand はコンテナーの起動時に実行されるコマンドを定義するために使用されます。違いは、CMDのパラメータはオーバーライドできるのに対し、ENTRYPOINTのパラメータはオーバーライドできないことです。通常、コンテナのエントリ ポイントを定義するために使用されます。
    例えば:

    ENTRYPOINT ["python", "app.py"]
    
  8. ENV :ENV環境変数を設定するコマンドです。これらの環境変数はコンテナ内で使用できます。例:という名前の環境変数ENV MY_ENV_VAR=valueを設定しますMY_ENV_VAR

  9. USER :USERこのコマンドは、コンテナ内でコマンドを実行するときに使用するユーザー名または UID を指定するために使用されます。これを使用すると、コンテナのセキュリティを向上させ、root 権限でアプリケーションを実行することを回避できます。
    例えば:

    USER appuser
    
  10. VOLUME :VOLUMEコマンドは、コンテナ間で共有できるボリュームを作成するために使用されます。通常、データを永続化するか、ホストとファイルを共有するために使用されます。
    例えば:

    VOLUME /data
    
  11. ARG :ARGこのコマンドは、ビルド プロセス中に Dockerfile に渡すことができるビルド時パラメーターを定義するために使用されます。これにより、ビルド時にいくつかの値を動的に設定できます。
    例えば:

    ARG APP_VERSION=latest
    

上記の一般的な Dockerfile コマンドに加えて、Docker イメージの構築プロセスをさらにカスタマイズおよび最適化するために使用できるコマンドとテクニックがいくつかあります。

  1. LABEL :LABELこのコマンドは、イメージにメタデータ ラベルを追加するために使用され、通常はイメージの説明情報、管理者情報などを提供するために使用されます。これらのタグはdocker inspectコマンドを使用して表示できます。
    例えば:

    LABEL maintainer="[email protected]"
    
  2. HEALTHCHECK :HEALTHCHECKコマンドは、コンテナーのヘルスチェックを定義するために使用されます。このコマンドを使用すると、Docker がコンテナーの健全性を監視し、コンテナーが異常な場合にアクションを実行できるようになります。
    例えば:

    HEALTHCHECK --interval=5m --timeout=3s \
      CMD curl -f http://localhost/ || exit 1
    
    具体解释如下:
    
    • --interval=5m: ヘルスチェックの間隔を設定します。この例では、コンテナーは 5 分ごとにヘルスチェックを実行します。設定されていない場合--interval、デフォルトで 30 秒ごとにチェックが実行されます。

    • --timeout=3s: この部分では、各ヘルスチェックのタイムアウトを設定します。ヘルス チェック コマンドが 3 秒以内に結果を返さない場合、ヘルス チェックは失敗したとみなされます。

    • CMD curl -f http://localhost/ || exit 1: この部分は実際のヘルスチェックコマンドです。curlコマンドを使用してアクセスを試行しhttp://localhost/、フラグを使用し-fて、HTTP リクエストが成功 (ステータス コード 2xx) を返した場合にのみcurlコマンドが成功を返すようにします。アクセスが失敗した場合 (たとえば、コンテナー内のアプリケーションが応答しない場合)、コマンドはcurl失敗し、コンテナーのヘルスチェックも失敗します。この場合、コンテナーのステータスは異常としてマークされます。

  3. マルチステージ ビルド: マルチステージ ビルドを使用すると、イメージ サイズを大幅に削減できます。Dockerfile で複数のビルド フェーズを定義し、あるフェーズから別のフェーズにビルド結果をコピーできます。
    例えば:

    # 第一阶段:构建应用程序
    FROM golang:1.16 AS builder
    WORKDIR /app
    COPY . .
    RUN go build -o myapp
    
    # 第二阶段:构建最终镜像
    FROM debian:bullseye-slim
    COPY --from=builder /app/myapp /usr/local/bin/myapp
    CMD ["myapp"]
    

これらのコマンドとテクニックを使用すると、Docker イメージをより柔軟に構築し、特定のニーズに応じてカスタマイズおよび最適化することができます。実際のアプリケーションでは、プロジェクトの複雑さと要件に基づいて、適切な Dockerfile コマンドと戦略の使用を選択できます。

おすすめ

転載: blog.csdn.net/Mrxiao_bo/article/details/132916390