操作
バグ #737
未完了Docker管理機能実装 - コンテナ操作API (子チケット)
ステータス:
新規
優先度:
高め
担当者:
-
開始日:
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 さんが約6時間前に更新
📋 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開発!
操作