バグ #737
未完了
Docker管理機能実装 - コンテナ操作API (子チケット)
Redmine Admin さんが約13時間前に追加.
約6時間前に更新.
説明
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以上)
- 重要コンテナの保護設定
- 操作ログの記録
- エラーハンドリング強化
✅ 完了条件¶
🔗 関連チケット¶
親チケット: インフラヘルパーサービス基盤構築
📅 期限¶
Phase 1 - 基盤実装: 2025年6月30日まで
📋 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