Compose、devcontainer 和 docker CLI
以下是兼容 Docker 界面的操作方法: 内置 cornus compose client、devcontainer 支持,以及通过 cornus daemon docker 驱动标准 docker CLI。三者均从 --host / connection profile / http://localhost:5000 解析 server。
启动和停止 Compose project (cornus compose up / down)
必要时构建、部署并在 foreground stream log;然后拆除 project。
cornus compose up
# Ctrl-C to stop, or from another terminal:
cornus compose down- Foreground
up持有 client-local mount 和 auto-forwarded port,并保持至 Ctrl-C,再移除自己启动的内容。down按 reverse dependency order 停止 service;添加--volumes也移除 project-scoped named volume。 - Compose file discovery 在 working directory 查找
compose.yaml/compose.yml/docker-compose.yaml/docker-compose.yml。
另请参阅: cornus compose、部署工作负载
检查 project (cornus compose ps / logs)
列出 service 及状态,并 stream 它们的 log。
cornus compose ps
cornus compose logs --follow --tail 100 webps接受--format table|json、-q或--services。logs并发 stream 所有 selected service;--follow没有短-f,因为 group 已将-f用于--file。- Cluster profile 中,log 直接通过 kubeconfig 从 pod 读取,回退至 server proxy。
另请参阅: cornus compose
在 up 时构建镜像 (cornus compose up --build,使用 --ssh)
启动前构建 service image,并向需要它的 build step 转发 ssh-agent。
cornus compose up --build --ssh default--build在启动前构建所有 image (build service 始终构建) 。--ssh接受default或id[=socket],并与每 service 的build.sshmerge。- 如需只构建不启动,使用
cornus compose build [--no-cache] [--build-arg KEY=VALUE]。
另请参阅: cornus compose、构建镜像
使用多个 Compose file、env file 和 profile (-f、--env-file、--profile)
Merge 多个 Compose file,指定 env file,并激活 profile service。
cornus compose \
-f compose.yaml -f compose.prod.yaml \
--env-file .env.prod \
--profile debug up- 这些是适用于每个 subcommand 的 group flag。
-f可重复并分层;--env-file替换默认.envdiscovery (后者获胜,process environment 仍优先) ;--profile可重复,并遵循COMPOSE_PROFILES。 - 多文件合并目前无法清除继承的标量。特别是,后续文件不能将继承的
privileged、tty、stdin_open或read_only值从true改回false,也不支持 Compose 的!reset/!overrideYAML 标签。将这类覆盖交给 Cornus 之前,请先将其扁平化为一个文件。
另请参阅: cornus compose
使用后台 agent detached 运行 (cornus compose up -d)
立即返回,将 client-local mount、forwarded port、SOCKS5 和 relay-backed egress 交给后台 agent。
cornus compose up -d
# later:
cornus compose down-d/--detach将 mount、forwarded port、任意 SOCKS5 proxy 和proxy/transparentegress session 交给客户端侧后台 agent,然后返回。之后使用down停止。用cornus daemon status/cornus daemon stop检查或停止 agent。- 以文件为源的 Compose
configs:和secrets:是单文件客户端本地挂载。dockerhost 使用父目录加 subpath 实现;Kubernetes 的共享 9P sidecar mount 无法把单个文件投影到任意 rootfs target,因此会拒绝它们。目录 bind mount 在 Kubernetes 上仍受支持。containerd backend 当前不支持客户端本地 deploy mount。
另请参阅: cornus compose、cornus daemon
Rebuild / restart / stop / start service
在不完整 down/up 的情况下重新构建 image 或循环运行中 service。
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均接受可选 service list (默认全部) 。其 client-local mount 被 backgroundup -dhelper 持有的 service 会被拒绝;使用down停止它。
另请参阅: cornus compose
运行 Dev Container (cornus compose --devcontainer,或自动检测 .devcontainer)
启动 devcontainer definition 并运行其 lifecycle hook。
# Explicit path or search directory:
cornus compose --devcontainer .devcontainer up
# Or auto-detected when no Compose file is present:
cornus compose up- 使用
--devcontainer、-f指向devcontainer.json,或不存在 Compose file 但可发现.devcontainer/devcontainer.json(或.devcontainer.json) 时,使用 devcontainer。混合 repo 中 Compose file 始终优先。 - Lifecycle hook 会运行: 任意 container 前在 host 上运行
initializeCommand,随后 container 启动时运行每 service 的onCreate/updateContent/postCreate/postStart/postAttach。
Cornus 有意只实现 Dev Container schema 的一个子集:
| 区域 | 实际处理的字段 |
|---|---|
| 容器来源 | 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 解释: 约五十个 flag 映射到对应的 service key,包括 --cap-add / --cap-drop、--device、--hostname、--user、--shm-size、--ulimit、--sysctl、--security-opt、--tmpfs、--read-only、--init、--privileged、--dns* 系列,以及 port / volume / env 的各种写法。不在该集合中的参数会被忽略,并给出点名该参数的警告。注意在此处被映射并不意味着每个后端都会实现它 —— 例如 --ulimit 和 --device 会在 kubernetes 转换中被丢弃。build.options 同样会作为 docker build 的 argv 应用。
对于基于 Compose 的定义,所有 runArgs 都会在发出警告后被忽略: 表达这些 key 的地方是 compose 文件。
containerUser 设置容器自身进程运行所用的用户,remoteUser (未设置时回退到 containerUser) 选择生命周期命令的用户。其他 schema 字段不在 Cornus 的支持范围内。
另请参阅: cornus compose
面向 Cornus server 驱动标准 docker CLI (cornus daemon docker + DOCKER_HOST)
运行一个讲 Docker Engine API 的 local proxy,它将 container op 转换为 Cornus deploy,然后将 standard 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- Foreground run 持续到 Ctrl-C;
-d/--daemon在 background agent 上注册 frontend 后返回。Socket 默认$XDG_RUNTIME_DIR/cornus-docker.sock(使用--socket/CORNUS_DOCKER_SOCK覆盖) 。 - 调用方本地 bind-mount directory 经 9P stream 到 server。
- 命名卷由所选部署后端预配,但
docker volume rm不会删除该后端存储;它只会从此代理进程的内存中移除名称。docker volume prune和docker system prune的卷处理阶段都不会报告回收了任何内容,也同样会保留后端存储。请改用 Cornus 可感知后端的卷生命周期。
另请参阅: cornus daemon、使用远程集群
Render merged config / print version (cornus compose config / version)
检查 Cornus 解析并 merge 后的 project 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(仅 validate,不打印) 。version接受--short或--format pretty|json。