lager devenv 为一个项目管理可复现的、基于 Docker 的开发环境。它把镜像、挂载目录、shell、已保存的命令、绑定挂载和环境变量,记录在项目 .lager 配置文件的 DEVENV 段中。这样,每位工程师以及您的 CI,都在同一个容器中构建和测试。
这个环境由 lager exec(在容器中运行命令)和 lager devenv terminal(在容器中打开交互式 shell)使用。
语法
子命令
前置条件
必须安装 Docker,并且它在您的PATH 中。请从
docker.com 安装。在 Linux 上,请把您的用户加入 docker 组,这样就不需要 sudo:
create
在项目的.lager 配置中创建 DEVENV 段。每个项目在使用 lager exec
或 lager devenv terminal 之前运行一次即可。
镜像名称会按标准 Docker 命名规则校验(
name、name:tag、registry/name、
registry/name:tag)。对 lagerdata/* 镜像,shell 默认为 /bin/bash;对其他镜像,系统会提示您输入。如果 DEVENV 段已经存在,覆盖之前会先询问您。
terminal
在开发容器内打开交互式 shell。您的项目目录会被绑定挂载到配置的mount_dir,退出时容器会被移除(除非使用了 --detach)。
命令行标志优先于
DEVENV 配置中对应的键。CLI 先应用配置中定义的
ports、volumes 和 environment,然后再追加您在命令行上传入的内容。
terminal 还会自动为您配置好 SSH。它转发您的 SSH_AUTH_SOCK agent 套接字,并在 ~/.ssh/id_ed25519 和 ~/.ssh/known_hosts 存在时以只读方式挂载它们。它也会把您的全局 .lager 配置挂载到容器中,这样嵌套调用的 lager 命令也是已认证的。
用 --info 可以查看将要执行什么,而不真正启动任何东西:
连接到正在运行的容器
show
打印解析后的DEVENV 配置 —— 标量键、列表键(ports、volumes、environment),以及已保存的命令。
set / unset
设置或删除单个配置键,无需重新运行create。
set 时会被替换):image、mount_dir、shell、user、
group、entrypoint、hostname、macaddr、network、platform、
repo_root_relative_path。
ports 键是一个列表,会被追加(也接受单数别名 port)。请分别用 lager devenv mount 和 lager devenv env 编辑 volumes 和
environment —— set 会拒绝它们,并指引您使用正确的命令。
已保存的命令:add / delete / commands
把 shell 命令保存为一个名称,之后就可以用lager exec <name> 运行。命令以 cmd.<name> 键的形式保存在 DEVENV 段中。
add 会提示您输入。
持久的绑定挂载:mount
把宿主机的绑定挂载 / 命名卷保存在配置中,这样每次运行lager devenv terminal 和 lager exec 时都会应用它们。
-v 的形式:绑定挂载为 HOST:CONTAINER[:ro],命名卷为 NAME:CONTAINER。为了在不同计算机之间可移植,写法中可以使用
~、环境变量,以及 ${PROJECT_ROOT}(它展开为您项目的 .lager 所在目录)。
持久的环境变量:env
把环境变量保存在配置中,这样每次运行时都会设置它们。env set 会替换同一变量已有的值。
与 lager exec 的关系
这三者读取同一个
DEVENV 段。用 lager devenv add 保存的命令在 lager exec
下运行。用 lager devenv mount add 添加的挂载,对 terminal 生效;当 exec 启动容器时也对 exec 生效。在被 CLI 识别为 CI 的作业中,
exec 会就地运行命令并忽略挂载。请参阅
在 CI 中运行。
说明
- 配置保存在最近的
.lager配置文件的DEVENV段中,该文件通过从当前目录逐级向上查找得到。 terminal默认以--rm启动容器,因此退出时容器会被移除,除非您传入--detach。- 容器中的退出码会传递给 CLI。

