Compose、Dev Container、Docker CLI
Docker 互換の機能向けレシピです。組み込みの cornus compose クライアント、Dev Container 対応、そして標準の docker CLI を cornus daemon docker 経由で動かす方法を扱います。いずれもサーバーは --host / 接続プロファイル / http://localhost:5000 から解決されます。
Compose プロジェクトを起動して停止する (cornus compose up / down)
必要に応じてビルドとデプロイを行い、フォアグラウンドでログをストリーミングします。その後、プロジェクトを削除します。
cornus compose up
# Ctrl-C で停止するか、別の端末から実行する:
cornus compose down- フォアグラウンドの
upはクライアントローカルマウントと自動転送済みポートを保持し、Ctrl-C まで動き続けます。その後、自分が起動したものを削除します。downはサービスを依存関係の逆順で停止します。プロジェクトスコープの名前付きボリュームも削除するには--volumesを追加します。 - Compose ファイルの検出では、作業ディレクトリの
compose.yaml/compose.yml/docker-compose.yaml/docker-compose.ymlを探します。
関連ページ: cornus compose, deploying workloads
プロジェクトの状態を確認する (cornus compose ps / logs)
サービスとその状態を一覧し、ログをストリームします。
cornus compose ps
cornus compose logs --follow --tail 100 webpsは--format table|json、-q、--servicesを取ります。logsは選択されたすべてのサービスを並行してストリームします。-fは--followの短縮形ではありません。-fはグループがすでに--file用に使います。- クラスタープロファイルの場合、ログは kubeconfig を使って pod から直接読み取られ、必要な場合だけサーバープロキシにフォールバックします。
関連ページ: cornus compose
up の間にイメージをビルドする (cornus compose up --build、--ssh 付き)
開始前にサービスイメージをビルドし、必要なビルドステップに SSH エージェントを転送します。
cornus compose up --build --ssh default--buildは開始前にすべてのイメージをビルドします (ビルドサービスは常にビルドされます)。--sshはdefaultまたはid[=socket]を取り、各サービスのbuild.sshの上に統合されます。- 開始せずにビルドするには、
cornus compose build [--no-cache] [--build-arg KEY=VALUE]を使います。
関連ページ: cornus compose, building images
複数の compose ファイル、env ファイル、プロファイルを使う (-f, --env-file, --profile)
複数の Compose ファイルを統合し、特定の環境変数ファイルを指定し、プロファイル付きサービスを有効化します。
cornus compose \
-f compose.yaml -f compose.prod.yaml \
--env-file .env.prod \
--profile debug up- これらはすべての subcommand に適用される group フラグです。
-fは繰り返し指定可能で layered です。--env-fileは既定の.envdiscovery を置き換えます (後のファイルが優先され、プロセス環境は引き続きそれらを上書きします)。--profileは繰り返し指定可能で、COMPOSE_PROFILESも尊重します。 - 複数ファイルのマージでは、現在のところ継承したスカラー値を消去できません。特に、後のファイルで継承した
privileged、tty、stdin_open、read_onlyの値をtrueからfalseに戻すことはできず、Compose の!reset/!overrideYAML タグにも対応していません。このような上書きは、Cornus に渡す前に一つのファイルへ平坦化してください。
関連ページ: cornus compose
バックグラウンドエージェントで切り離して実行する (cornus compose up -d)
クライアントローカルマウント、forwarded ポート、SOCKS5、中継型エグレスをバックグラウンドエージェントに渡し、すぐに戻ります。
cornus compose up -d
# later:
cornus compose down-d/--detachはマウント、forwarded ポート、任意の SOCKS5 プロキシ、proxy/transparentエグレスセッションをクライアント側バックグラウンドエージェントに渡して戻ります。後でdownにより停止します。エージェントの確認や停止にはcornus daemon status/cornus daemon stopを使います。- ファイルをソースとする Compose の
configs:とsecrets:は、単一ファイルのクライアントローカルマウントです。dockerhost では親ディレクトリとサブパスを使って実現できます。Kubernetes の共有 9P サイドカーマウントは任意のルートファイルシステム上の対象へ 1 ファイルだけを投影できないため、これらを拒否します。ディレクトリのバインドマウントは Kubernetes でも引き続き利用できます。containerd バックエンドは現在、クライアントローカル deploy マウントをサポートしていません。
関連ページ: cornus compose, cornus daemon
サービスを再ビルド、再起動、停止、開始する
down と up を完全にやり直さず、イメージを再ビルドしたり実行中サービスを再起動したりします。
cornus compose build web # rebuild one service's image
cornus compose restart web # restart in forward dependency order
cornus compose stop web # stop in reverse dependency order
cornus compose start web # start in forward dependency orderrestart/stop/startはそれぞれ任意のサービス list を取ります (既定: all)。バックグラウンドのup -dhelper がクライアントローカルマウントを保持しているサービスは拒否されます。停止するにはdownを使ってください。
関連ページ: cornus compose
Dev Container を実行する (cornus compose --devcontainer、または自動検出した .devcontainer)
devcontainer の定義を起動し、そのライフサイクルフックを実行します。
# Explicit path or search directory:
cornus compose --devcontainer .devcontainer up
# Or auto-detected when no Compose file is present:
cornus compose up- devcontainer は、
--devcontainerを指定した場合、-f引数がdevcontainer.jsonを指す場合、または Compose ファイルがなく.devcontainer/devcontainer.json(または.devcontainer.json) が自動検出できる場合に使われます。混在リポジトリでは Compose ファイルが常に優先されます。 - ライフサイクル hook が実行されます。コンテナの前にホスト上で
initializeCommandが実行され、その後コンテナの起動に合わせてサービスごとのonCreate/updateContent/postCreate/postStart/postAttachが実行されます。
Cornus は Dev Container スキーマのうち、意図的に限定した範囲を実装しています。
| 領域 | 処理されるフィールド |
|---|---|
| コンテナのソース | image; build.dockerfile, build.context, build.args, build.target, build.cacheFrom |
| ワークスペースとランタイム | workspaceFolder, workspaceMount, mounts (type=bind, type=volume, type=tmpfs), forwardPorts, appPort, containerEnv, remoteEnv, overrideCommand, containerUser, remoteUser |
| Compose ベースの定義 | dockerComposeFile, service, runServices |
| ライフサイクル | initializeCommand, onCreateCommand, updateContentCommand, postCreateCommand, postStartCommand, postAttachCommand |
| コンテナオプション | runArgs (単一コンテナ定義), build.options |
features と hostRequirements は認識されますが、警告とともに無視されます。エディター固有の customizations も同様です。
単一コンテナ定義では、runArgs は docker run の argv として解釈されます。およそ 50 個のフラグが対応するサービスキーへマップされ、--cap-add / --cap-drop、--device、--hostname、--user、--shm-size、--ulimit、--sysctl、--security-opt、--tmpfs、--read-only、--init、--privileged、--dns* 系、およびポート / ボリューム / 環境変数の各形式が含まれます。この集合に含まれない引数は、その名前を挙げた警告とともに無視されます。ここでマップされることは、すべてのバックエンドがそれを実現することを意味しません。たとえば --ulimit と --device は kubernetes への変換で落とされます。build.options も同様に docker build の argv として適用されます。
Compose ベースの定義では、runArgs はすべて警告とともに無視されます。それらのキーを表現する場所は compose ファイルです。
containerUser はコンテナ自身のプロセスが動作するユーザーを設定し、remoteUser (未設定の場合は containerUser) がライフサイクルコマンドのユーザーを選びます。その他のスキーマフィールドは Cornus のサポート範囲外です。
関連ページ: cornus compose
標準 docker CLI を Cornus サーバーに向ける (cornus daemon docker + DOCKER_HOST)
Docker エンジン API を話し、コンテナ operation を cornus deployに変換するローカルプロキシを実行してから、標準 docker をそこへ向けます。
cornus daemon docker --host https://cornus.example.com:5000
export DOCKER_HOST=unix:///run/user/1000/cornus-docker.sock
docker run -d -v ./conf:/etc/app:ro nginx- フォアグラウンド run は Ctrl-C まで保持します。
-d/--daemonは frontend をバックグラウンドエージェントに登録して戻ります。ソケットの既定は$XDG_RUNTIME_DIR/cornus-docker.sockです (--socket/CORNUS_DOCKER_SOCKで上書き)。 - 呼び出し元のローカル bind-mount ディレクトリは 9P でサーバーへストリームされます。
- 名前付きボリュームは選択したデプロイバックエンドがプロビジョニングしますが、
docker volume rmはバックエンドのストレージを削除せず、このプロキシプロセスのメモリから名前を消すだけです。docker volume pruneとdocker system pruneのボリューム処理も回収した容量を報告せず、同様にバックエンドのストレージを残します。代わりに、Cornus のバックエンド対応のボリュームライフサイクルを使用してください。
関連ページ: cornus daemon, リモートクラスターで作業する
merged 設定を描画する / version を出力する (cornus compose 設定 / version)
プロジェクトについて cornus が解析 / 統合した view を確認するか、Compose CLI version を出力します。
cornus compose config # full merged model as YAML
cornus compose config --services # just service names, in dependency order
cornus compose version --shortconfigは--volumes、--images、--format yaml|json、-q(検証のみ、何も出力しない) も取ります。versionは--shortまたは--format pretty|jsonを取ります。
関連ページ: cornus compose, cornus version-health