- ホーム
- ドキュメントビルダー
- Docker ビルド
Docker ビルド
ビルダーは Docker イメージとして提供されます。コンテンツリポジトリは、Node.js や Astro をローカルにインストールすることなく、このイメージを実行して静的 HTML を生成します。
Dockerfile
Section titled “Dockerfile”docker/Dockerfile は node:24-alpine を使用したマルチステップビルドを採用しています:
FROM node:24-alpine AS builderWORKDIR /app
# Install deps (cached layer)COPY package*.json ./RUN npm ci
# Copy framework codeCOPY . .
# Remove placeholder contentRUN rm -rf src/content/docs/*
COPY docker/entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]レイヤー戦略
Section titled “レイヤー戦略”| レイヤー | 内容 | 個別にキャッシュする理由 |
|---|---|---|
| 1 | COPY package*.json + npm ci | 依存関係は変更頻度が低く、このレイヤーをキャッシュすることで毎回のビルドでの再ダウンロードを回避 |
| 2 | COPY . . | フレームワークのソースコード |
| 3 | rm -rf src/content/docs/* | 注入されたコンテンツのみが表示されるよう、プレースホルダーコンテンツを削除 |
| 4 | COPY entrypoint.sh | ビルドオーケストレーションスクリプト |
エントリポイント
Section titled “エントリポイント”docker/entrypoint.sh はコンテナ起動時に毎回実行されます。以下の手順を順番に実行します:
ステップ 1: 依存関係の更新
Section titled “ステップ 1: 依存関係の更新”npm installnpm updateテーマパッケージおよびすべての依存関係が最新の互換バージョンであることを確認します。
ステップ 2: テーマ設定のコピー
Section titled “ステップ 2: テーマ設定のコピー”cp /app/node_modules/@f5-sales-demo/docs-theme/astro.config.mjs /app/astro.config.mjscp /app/node_modules/@f5-sales-demo/docs-theme/src/content.config.ts /app/src/content.config.tsテーマパッケージから astro.config.mjs と content.config.ts をコピーします。テーマは Astro 設定の唯一の信頼できるソースです。テーマシステムの設計についてはアーキテクチャを参照してください。
ステップ 3: コンテンツの注入
Section titled “ステップ 3: コンテンツの注入”if [ -d "$CONTENT_DIR" ]; then cp -r "$CONTENT_DIR"/* /app/src/content/docs/else echo "ERROR: No content found at $CONTENT_DIR" exit 1fiマウントされたコンテンツを Astro のコンテンツコレクションディレクトリにコピーします。コンテンツディレクトリが存在しない場合はエラーで終了します。
ステップ 4: タイトルの抽出
Section titled “ステップ 4: タイトルの抽出”if [ -z "$DOCS_TITLE" ] && [ -f /app/src/content/docs/index.mdx ]; then DOCS_TITLE=$(grep -m1 '^title:' /app/src/content/docs/index.mdx | sed 's/title: *["]*//;s/["]*$//') export DOCS_TITLEfiDOCS_TITLE が環境変数で設定されていない場合、index.mdx の title: フロントマターフィールドから抽出します。
ステップ 5: ベースパスの抽出
Section titled “ステップ 5: ベースパスの抽出”if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then DOCS_BASE="/${GITHUB_REPOSITORY#*/}" export DOCS_BASEfiGitHub リポジトリ名からサイトのベースパスを導出します(例:owner/my-docs は /my-docs になります)。
ステップ 6: ビルド
Section titled “ステップ 6: ビルド”npm run buildastro build を実行し、/app/dist/ に静的出力を生成します。
ステップ 7: 出力のコピー
Section titled “ステップ 7: 出力のコピー”if [ -d "$OUTPUT_DIR" ]; then cp -r /app/dist/* "$OUTPUT_DIR"/fiビルドされたサイトを出力マウントポイントにコピーします。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
CONTENT_DIR | /content/docs | マウントされたコンテンツディレクトリへのパス |
OUTPUT_DIR | /output | ビルドされたサイトがコピーされるパス |
DOCS_TITLE | (index.mdx から抽出) | Astro 設定に渡されるサイトタイトル |
DOCS_DESCRIPTION | (index.mdx から抽出) | フロントマターからのサイト説明 |
DOCS_BASE | (GITHUB_REPOSITORY から導出) | サイトのベースパス(例:/my-docs) |
DOCS_SITE | (GITHUB_REPOSITORY_OWNER から導出) | Astro 設定に渡されるサイト URL(例:https://<owner>.github.io) |
GITHUB_REPOSITORY | (GitHub Actions により設定) | DOCS_BASE の導出に使用される owner/repo 文字列 |
GENERATE_PDF | false | ビルド後の PDF 生成を有効化 |
PDF_FILENAME | docs | 生成される PDF の出力ファイル名 |
LLMS_OPTIONAL_LINKS | [] | llms.txt の Optional セクション用の子サイト URL の JSON 配列 |
ローカルでの使用方法
Section titled “ローカルでの使用方法”Docker を使用してローカルでドキュメントをビルドするには:
docker run --rm \ -v "$(pwd)/docs:/content/docs" \ -v "$(pwd)/output:/output" \ ghcr.io/f5-sales-demo/docs-builder:latestこれにより、ローカルの docs/ ディレクトリがコンテンツとしてマウントされ、ビルドされたサイトが output/ に書き込まれます。
ライブ開発サーバーワークフローを希望するコンテンツ執筆者は、コンテンツ執筆者向けローカルプレビューを参照してください。
開発者向け: ローカル開発サーバー
Section titled “開発者向け: ローカル開発サーバー”ビルダー自体(コンポーネント、プラグイン、テーマ統合)の開発を行う場合、Docker を使用せずに Astro の開発サーバーを直接実行できます:
npm cicp node_modules/@f5-sales-demo/docs-theme/astro.config.mjs astro.config.mjscp node_modules/@f5-sales-demo/docs-theme/src/content.config.ts src/content.config.ts# Copy some test content into the content collectioncp -r /path/to/test-content/* src/content/docs/DOCS_TITLE="Dev Test" npx astro dev --hosthttp://localhost:4321 を開きます。コンポーネントやプラグインの変更にはホットモジュールリプレースメント(HMR)が機能します。
イメージレジストリ
Section titled “イメージレジストリ”イメージは GitHub Container Registry に公開されています:
ghcr.io/f5-sales-demo/docs-builder毎回のビルドで 2 つのタグがプッシュされます:
| タグ | 説明 |
|---|---|
latest | main からの最新ビルド |
<sha> | 再現可能なビルドのための完全な Git コミット SHA |
イメージのビルドと公開を行うワークフローについては、CI/CD とガバナンスを参照してください。