Closed4

100日チャレンジ day61 (コンテナランタイム)

riddle_tecriddle_tec

昨日
https://zenn.dev/gin_nazo/scraps/828db646a6a4be


https://blog.framinal.life/entry/2025/04/14/154104

100日チャレンジに感化されたので、アレンジして自分でもやってみます。

やりたいこと

  • 世の中のさまざまなドメインの簡易実装をつくり、バックエンドの実装に慣れる(dbスキーマ設計や、関数の分割、使いやすいインターフェイスの切り方に慣れる
  • 設計力(これはシステムのオーバービューを先に自分で作ってaiに依頼できるようにする
  • 生成aiをつかったバイブコーティングになれる
  • 実際にやったことはzennのスクラップにまとめ、成果はzennのブログにまとめる(アプリ自体の公開は必須ではないかコードはgithubにおく)

できたもの

https://github.com/lirlia/100day_challenge_backend/tree/main/day61_container_runtime

riddle_tecriddle_tec

素晴らしい選択です!実際のDocker imageを落として動かせるコンテナランタイムは非常に挑戦的で学習効果の高いプロジェクトになります。

まず仕様を壁打ちしてから実装に進みましょう。

Day61 - コンテナランタイム 仕様

コア機能

  1. Docker image 対応

    • Docker Registry (Docker Hub) からのimage pull
    • Docker image format (layer, manifest) の解析
    • Overlay filesystem での layer 管理
  2. コンテナ実行環境

    • Linux namespaces (PID, Network, Mount, UTS, IPC, User)
    • cgroups によるリソース制限 (CPU, Memory)
    • chroot による rootfs 分離
  3. ライフサイクル管理

    • Container 作成・起動・停止・削除
    • 実行中コンテナの状態管理
    • プロセス監視とログ収集

技術スタック

  • 言語: Go (システムコール操作、並行処理に最適)
  • Web UI: Next.js (操作・監視用ダッシュボード)
  • 要件: Linux環境 (namespaces, cgroups が必要)

実装範囲

  • 基本的なDocker image (alpine, ubuntu base image) の実行
  • 簡単なコマンド実行 (/bin/sh, echo, ls など)
  • Web UI での操作・監視

実装しない範囲

  • Dockerfile からのbuild
  • Volume mount (簡略化)
  • Network bridge 詳細設定
  • セキュリティ強化 (権限昇格対策など)

段階的実装計画

  1. Phase 1: Go バックエンド基盤 + image pull 機能
  2. Phase 2: Namespace/cgroup 制御 + 基本コンテナ実行
  3. Phase 3: Web UI ダッシュボード + 統合テスト
  4. Phase 4: 実際のDocker image (alpine等) での動作確認

この仕様で進めてよろしいでしょうか?特に以下の点を確認させてください:

  1. 実行環境: Linux環境で開発しますか?(macOSではLinux VMが必要)
  2. 対象image: まずは軽量なalpine linuxから始めますか?
  3. UI重要度: Web UIは最低限で、主にバックエンド実装に集中しますか?

数字で選択肢をお答えいただくか、この仕様で開始してよろしければ「Go」とお答えください!

riddle_tecriddle_tec

結局 image layer を解釈して、rootfs からコマンド実行する感じか。

このスクラップは3ヶ月前にクローズされました