Skip to main content
lager devenv 为一个项目管理可复现的、基于 Docker 的开发环境。它把镜像、挂载目录、shell、已保存的命令、绑定挂载和环境变量,记录在项目 .lager 配置文件的 DEVENV 段中。这样,每位工程师以及您的 CI,都在同一个容器中构建和测试。 这个环境由 lager exec(在容器中运行命令)和 lager devenv terminal(在容器中打开交互式 shell)使用。

语法

子命令

前置条件

必须安装 Docker,并且它在您的 PATH 中。请从 docker.com 安装。在 Linux 上,请把您的用户加入 docker 组,这样就不需要 sudo

create

在项目的 .lager 配置中创建 DEVENV 段。每个项目在使用 lager execlager devenv terminal 之前运行一次即可。
镜像名称会按标准 Docker 命名规则校验(namename:tagregistry/nameregistry/name:tag)。对 lagerdata/* 镜像,shell 默认为 /bin/bash;对其他镜像,系统会提示您输入。如果 DEVENV 段已经存在,覆盖之前会先询问您。

terminal

在开发容器内打开交互式 shell。您的项目目录会被绑定挂载到配置的 mount_dir,退出时容器会被移除(除非使用了 --detach)。
命令行标志优先于 DEVENV 配置中对应的键。CLI 先应用配置中定义的 portsvolumesenvironment,然后再追加您在命令行上传入的内容。 terminal 还会自动为您配置好 SSH。它转发您的 SSH_AUTH_SOCK agent 套接字,并在 ~/.ssh/id_ed25519~/.ssh/known_hosts 存在时以只读方式挂载它们。它也会把您的全局 .lager 配置挂载到容器中,这样嵌套调用的 lager 命令也是已认证的。 --info 可以查看将要执行什么,而不真正启动任何东西:

连接到正在运行的容器


show

打印解析后的 DEVENV 配置 —— 标量键、列表键(ports、volumes、environment),以及已保存的命令。

set / unset

设置或删除单个配置键,无需重新运行 create
标量键(set 时会被替换):imagemount_dirshellusergroupentrypointhostnamemacaddrnetworkplatformrepo_root_relative_path ports 键是一个列表,会被追加(也接受单数别名 port)。请分别用 lager devenv mountlager devenv env 编辑 volumesenvironment —— set 会拒绝它们,并指引您使用正确的命令。

已保存的命令:add / delete / commands

把 shell 命令保存为一个名称,之后就可以用 lager exec <name> 运行。命令以 cmd.<name> 键的形式保存在 DEVENV 段中。
命令名称只能包含字母、数字、短横线和下划线。如果省略命令字符串, add 会提示您输入。

持久的绑定挂载:mount

把宿主机的绑定挂载 / 命名卷保存在配置中,这样每次运行 lager devenv terminallager exec 时都会应用它们。
写法采用 Docker -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。