プロジェクト

全般

プロフィール

バグ #737

未完了

Docker管理機能実装 - コンテナ操作API (子チケット)

Redmine Admin さんが約7時間前に追加. 17分前に更新.

ステータス:
新規
優先度:
高め
担当者:
-
開始日:
2025-06-26
期日:
進捗率:

0%

予定工数:

説明

Docker管理機能実装 - コンテナ操作API

🎯 概要

VPS-ROOT環境のDockerコンテナを管理するためのAPI及びUI機能を実装します。

📋 実装対象

1. API エンドポイント

  • GET /api/v1/docker/containers - コンテナ一覧取得
  • POST /api/v1/docker/containers/:id/start - コンテナ開始
  • POST /api/v1/docker/containers/:id/stop - コンテナ停止
  • POST /api/v1/docker/containers/:id/restart - コンテナ再起動
  • GET /api/v1/docker/containers/:id/logs - ログ取得
  • GET /api/v1/docker/containers/:id/stats - 統計情報取得

2. 主要関数

  • listContainers(options?: ContainerListOptions): Promise<Container[]>
  • startContainer(nameOrId: string): Promise<ContainerResult>
  • stopContainer(nameOrId: string): Promise<ContainerResult>
  • restartContainer(nameOrId: string): Promise<ContainerResult>
  • getContainerLogs(nameOrId: string, options?: LogOptions): Promise<string>
  • inspectContainer(nameOrId: string): Promise<ContainerInfo>

3. UI コンポーネント

  • DockerManagementPage.tsx - Docker管理画面
  • ContainerTable - コンテナ一覧テーブル
  • ContainerActionButtons - コンテナ操作ボタン
  • LogViewerModal - ログ表示モーダル

🔧 技術仕様

Docker API連携

  • Docker Socket: /var/run/docker.sock
  • Dockerode ライブラリ使用
  • コンテナ名・IDによる操作
  • リアルタイムログストリーミング

安全性要件

  • 権限ベースアクセス制御 (Operator以上)
  • 重要コンテナの保護設定
  • 操作ログの記録
  • エラーハンドリング強化

✅ 完了条件

  • Docker API エンドポイント実装完了
  • コンテナ操作関数群実装完了
  • Docker管理UI実装完了
  • ログストリーミング機能動作確認
  • 権限制御テスト合格

🔗 関連チケット

親チケット: インフラヘルパーサービス基盤構築

📅 期限

Phase 1 - 基盤実装: 2025年6月30日まで

Redmine Admin さんが17分前に更新

📋 Docker管理機能実装 - 現状・詳細仕様追記

🔍 現在の実装状況

API エンドポイント実装状況 (/api/v1/docker)

エンドポイント メソッド 実装状況 パラメータ レスポンス
/containers GET 🔄 開発中 ?all=true&filters {containers[]}
/containers/:id GET 📋 設計完了 - {container}
/containers/:id/start POST 📋 設計完了 - {success}
/containers/:id/stop POST 📋 設計完了 {timeout?} {success}
/containers/:id/restart POST 📋 設計完了 {timeout?} {success}
/containers/:id/remove DELETE 📋 設計完了 {force?} {success}
/containers/:id/logs GET 📋 設計完了 ?follow&tail&since {logs}
/containers/:id/logs/stream GET 📋 設計完了 ?follow=true WebSocket
/containers/:id/stats GET 📋 設計完了 - {stats}
/images GET 📋 設計完了 ?all=true {images[]}
/images/:id DELETE ⭕ 未着手 {force?} {success}
/images/pull POST ⭕ 未着手 {image} {success}
/networks GET 📋 設計完了 - {networks[]}
/volumes GET 📋 設計完了 - {volumes[]}

関数実装状況 (1/14 開発中、11/14 設計完了、2/14 未着手)

ファイル: /src/services/docker/DockerManagementService.ts

🔄 Docker操作関数

// コンテナ管理 - 設計完了
async listContainers(options?: ContainerListOptions): Promise<Container[]>  // 設計完了
async startContainer(nameOrId: string): Promise<ContainerResult>  // 設計完了
async stopContainer(nameOrId: string): Promise<ContainerResult>  // 設計完了
async restartContainer(nameOrId: string): Promise<ContainerResult>  // 設計完了
async removeContainer(nameOrId: string, force?: boolean): Promise<ContainerResult>  // 設計完了
async getContainerLogs(nameOrId: string, options?: LogOptions): Promise<string>  // 設計完了
async inspectContainer(nameOrId: string): Promise<ContainerInfo>  // 設計完了

// リソース管理 - 設計完了
async listImages(all?: boolean): Promise<DockerImage[]>  // 設計完了
async removeImage(imageId: string, force?: boolean): Promise<ImageResult>  // 未着手
async pullImage(imageName: string): Promise<PullResult>  // 未着手
async listNetworks(): Promise<Network[]>  // 設計完了
async listVolumes(): Promise<Volume[]>  // 設計完了

// 統計・監視 - 一部開発中
async getContainerStats(nameOrId: string): Promise<ContainerStats>  // 開発中
async streamContainerLogs(nameOrId: string): Promise<NodeJS.ReadableStream>  // 設計完了

🔧 技術仕様詳細

Docker API連携

  • Docker Socket: /var/run/docker.sock
  • ライブラリ: Dockerode
  • 操作対象: コンテナ名・IDによる操作
  • リアルタイム: ログストリーミング対応

安全性要件

  • ✅ 権限ベースアクセス制御 (Operator以上)
  • 📋 重要コンテナの保護設定 (設計完了)
  • 📋 操作ログの記録 (設計完了)
  • 📋 エラーハンドリング強化 (設計完了)

📈 進捗サマリー

  • API エンドポイント: 1/14 (7%) 開発中、11/14 (79%) 設計完了、2/14 (14%) 未着手
  • Docker操作関数: 1/14 (7%) 開発中、11/14 (79%) 設計完了、2/14 (14%) 未着手
  • UI コンポーネント: 要実装
  • 権限制御: 設計完了

Docker API基盤は設計完了。/containers エンドポイントが開発中で、次は実装完了とUI開発!

他の形式にエクスポート: Atom PDF