X(Twitter) Zenn GitHub RSS 共有

Docker

作成日時:2024-10-14
更新日時:2024-10-14

Docker ドキュメント日本語化プロジェクト — Docker-docs-ja 24.0 ドキュメント
Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント

Dockerfileを書く時注意事項

Dockerfileを書く際には、以下の点に気を付けることが重要です:

  1. ベースイメージの選択:
    • 目的に合った軽量なイメージを選ぶ
    • 公式イメージを使用し、信頼性を確保する
  2. マルチステージビルド:
    • ビルド環境と実行環境を分離し、最終イメージのサイズを小さくする
  3. レイヤーの最小化:
    • RUN命令をチェーンし、レイヤー数を減らす
    • &&とかで繋ぐ
    • 不要なファイルは削除する
  4. キャッシュの効率的な利用:
    • 変更が少ない手順を先に記述し、ビルド時間を短縮する
    • あえて無効にして、不正なキャッシュを使用させないことも
  5. 環境変数の活用:
    • ENV命令で設定し、柔軟性を高める
    • ENVで環境変数を指定すれば、実行基盤に環境変数が無い場合、その値をデフォルトで使用する。
  6. 適切なユーザー権限:
    • rootユーザーでの実行を避け、セキュリティを向上させる
  7. ヘルスチェックの追加:
    • HEALTHCHECK命令でコンテナの状態を監視する
    • オーケストレーションのときとか。
    • LBとか外部でやってるならやんなくていいかも
    • dockerヘルスチェックは設定次第では若干パフォーマンスに影響を与える。
  8. .dockerignoreファイルの使用:
    • 不要なファイルをビルドコンテキストから除外する
    • COPYでコンテナに置くフォルダの中で要らないものを除外する感じ
    • ADDとかも
  9. バージョン管理:
    • パッケージやツールのバージョンを明示的に指定する
  10. ドキュメント化:
    • LABEL命令でメタデータを追加し、管理を容易にする
  11. cdを使わない
    • workdirを使え

DockerfileにおけるCOPYとADD命令の比較

1. 基本的な機能

COPY

ADD

2. 主な違い

ソースの種類

圧縮ファイルの扱い

URLからのダウンロード

3. 使用例

COPY の例

COPY ./app /app
COPY config.json /etc/app/config.json

ADD の例

ADD https://example.com/big.tar.xz /usr/src/things/
ADD project.tar.gz /app/

4. ベストプラクティス

  1. 基本的にはCOPYを使用

    • 単純で予測可能な動作
    • セキュリティリスクが低い
  2. ADDは特殊な場合のみ使用

    • リモートURLからファイルを取得する場合
    • ローカルの圧縮ファイルを自動解凍する場合
  3. リモートファイルのダウンロードには別のRUN命令を使用

    RUN curl -O https://example.com/file.tar.gz \
        && tar -xzf file.tar.gz -C /usr/src/app \
        && rm file.tar.gz
    

5. 注意点

6. 結論

その他