公開 Docker リポジトリ

どんなコンテナも Cmdop マシンに。

すでにある Dockerfile に 2 行。あなたのアプリケーションが PID 1 のままで、エージェントは同乗します。

A Docker deployment contains the CMDOP relay, editable project files and Git history while remote machines connect outbound
Dockerfile
FROM your-image                                    # unchanged
COPY --from=markolofsen/cmdop:latest /cmdop /usr/local/bin/cmdop
ENTRYPOINT ["cmdop", "sidecar", "--"]
CMD ["your-app", "--your", "flags"]                # unchanged

ベースイメージもコマンドもそのままです。

Cmdop は単一バイナリで届きます。

コントロールプレーンはどこか別の場所で待つのではなく、コンテナと一緒に到着します。

  • データベースサーバー不要
  • Redis 不要
  • メッセージブローカー不要
  • バックエンドサービス不要
  • 併設して配備する Web アプリ不要

イメージにファイルを 1 つコピーするだけ。同じバイナリが、マシンエージェントにも、他のマシンが参加する relay にも、ブラウザコンソールにも、ターミナルホストにも、AI ランタイムにもなります。違いは呼び出し方だけです。

1つの製品システム

1台のマシンから始めて、フリートへ拡張します。

ホストごとの daemon ではなく、コンテナごとのエージェント。

ホスト上の共有エージェントは、すべてのコンテナの運用状態を抱え込み、そのすべてへのアクセスを必要とし、それ自体がインフラになります。イメージの中で届くエージェントはそうなりません。

範囲
ホストの daemon: そのマシン上のすべてのコンテナ
コンテナ内の Cmdop: 自分のコンテナだけ、それ以外はなし
アクセス
ホストの daemon: Docker ソケットまたはホスト権限
コンテナ内の Cmdop: コンテナがすでに持つものだけ
ライフサイクル
ホストの daemon: 個別にインストール、更新、監視
コンテナ内の Cmdop: コンテナと共に起動し、停止する
運用状態
ホストの daemon: 管理対象すべてで共有
コンテナ内の Cmdop: コンテナごとに分離
スケーリング
ホストの daemon: 1 つのエージェントが全体に追随
コンテナ内の Cmdop: 管理性はイメージと共に複製される

コンテナの主役はあなたのプロセスのままです。

cmdop sidecar はエージェントをバックグラウンドで起動し、その後あなたのコマンドを exec します。アプリケーションが PID 1 になるため、docker stop、シグナル、終了コード、再起動ポリシーは以前とまったく同じに振る舞います。

Docker starts the cmdop sidecar entrypoint, which execs the application so it runs as PID 1 and receives SIGTERM directly, while the Cmdop agent runs beside it in the background and connects outbound to a relay elsewhere

PID 1 はあなたのもの

エージェントはバックグラウンドの子プロセスです。Docker はあなたのプロセスに直接シグナルを送り、その終了コードがコンテナの終了コードになります。

エージェントの失敗は障害ではない

エージェントが起動できなくても relay に到達できなくても、アプリケーションは動き続けます。join key が未設定なら、sidecar はただの exec です。

アウトバウンドのみ

コンテナ側から relay に接続します。受信ポートは開かず、ingress ルールも必要ありません。

どんなベースイメージでも

バイナリは libc をリンクしないため、Alpine、Debian、distroless、scratch のいずれでも動きます。

参加したマシンにできること。

ターミナル

稼働中のコンテナ内のシェルを、ブラウザからも CLI からもスマートフォンからも開けます。

ファイルアクセス

コンテナ内のファイルを読み、差分を見て、編集します。範囲はエージェントに指定したディレクトリに限られます。

AI 操作

コンテナの中身の調査、変更、実行、デバッグをエージェントに任せられます。

リモート実行

任意の Cmdop 画面からコマンドを実行し、マシン間で作業を受け渡せます。

1 つのコンテナから、fleet へ。

同じイメージがノート PC でも、Compose でも、すでにコンテナを動かしているどこででも動きます。500 個起動すれば、独立したエージェントが 500 個。管理性は隣に配備するものではなく、イメージの性質だからです。

  1. 1 つのコンテナ
  2. fleet の 1 マシン
  3. 運用できる fleet

あとは fleet の join key を渡すだけ。

イメージをビルドし、relay のアドレスと join key を環境変数で渡します。マシンは起動時に fleet に現れ、他に設定するものはありません。

公開リポジトリには、ごく普通の Node アプリに 15 行の Dockerfile を足した例があります。変数、それぞれが防ぐもの、そして今すぐ起動できるコンテナが揃っています。

Inside the Docker deployment, an editable project folder flows into verified output and then into Git history
デモスタンド

決める前に、ループ全体を見る。

公開デモはあえて大がかりな構成です。自前の relay をホストし、書き込み可能なプロジェクトを mount し、開発サーバーを走らせるので、エージェントが実アプリを編集し、その変更が Git 履歴に残るまでを見届けられます。

これは Cmdop の全体像を示すためのものです。すでにあるコンテナにエージェントを足すのは、変わらず 2 行です。

2 行で、そのコンテナはあなたが運用できるものになる。

すでに出荷しているイメージにバイナリを追加するか、実例を clone してマシンが参加する様子を見てください。