18 个版本 (重大更改)
新 0.13.2 | 2024 年 8 月 15 日 |
---|---|
0.13.1 | 2024 年 6 月 17 日 |
0.12.1 | 2024 年 5 月 21 日 |
0.10.0 | 2024 年 1 月 21 日 |
0.5.1 | 2023 年 7 月 11 日 |
#101 in Unix API
每月 277 次下载
170KB
3K SLoC
超级编排器
超级编排器的目的是作为一个比 bash 脚本和 docker-compose
更易于编程、可扩展和可调试的替代品。它基于 Tokio,并提供了方便的文件管理、命令运行和 Docker 容器管理工具。
首先,查看 stacked_errors
的文档(https://docs.rs/stacked_errors/latest/stacked_errors/)以了解错误策略。然后,查看文档。最后,按照以下顺序检查示例:路径、文件选项、基本命令、基本容器、命令、Dockerfile 入口点模式、PostgreSQL 和清理(注意,其中一些使用 UNIX 特定命令,在有些环境中可能无法成功运行)。
备注
"nix_support" 特性使一些函数能够向命令发送 UNIX 信号。
交叉编译
在 Windows 上进行交叉编译实际上是不可能的(相信我,我已经尝试过两次,只需使用 WSL 2 或 MSYS2)。使用交叉编译的 Dockerfile 入口点模式示例在直接 Windows 上将不会工作。然而,在容器内进行交叉编译是可能的,并且仍然可以通过挂载 CARGO_HOME
来快速重新编译构建工件。下面是一个示例:
if cfg!(windows) {
Container::new(
"builder",
Dockerfile::contents(/* build container definition */),
)
.volume(
home::cargo_home().stack()?.to_str().stack()?, // using the `home` crate
"/root/.cargo", // if building in a typical Linux container
)
.volume(/* base directory */, "/needs_build")
.workdir("/needs_build")
.entrypoint_args(["sh", "-c", &format!("cargo -vV && {build_cmd}",)])
.run(
Some(/* dockerfiles_dir */),
Duration::from_secs(3600),
/* logs_dir */,
true,
)
.await
.stack()?
.assert_success()
.stack()?;
}
我会在 super_orchestrator
本身中包含执行此操作的功能,但在这个层面我们正在做太多的环境假设。如果本地使用的 cargo 版本和在构建容器中使用的版本不兼容,可能会出现问题。这最终必须按仓库自动完成,而 dockerfile_entrypoint_pattern
只是一个入门示例。
Docker 不一致性
通常情况下,Docker 在一致性和在不同环境中运行相同事物方面表现良好,但有一些事情有不同的默认设置(意味着在某一个环境中运行完美的事物可能在另一个环境中失败),其中最值得注意的是涉及网络访问的事物。
- 当启用IPv6时,应使用以下参数
container.create_args([
"--cap-add=NET_ADMIN", // if doing anything requiring admin access for network stuff
"--sysctl",
"net.ipv6.conf.all.disable_ipv6=0", // some environments need this also
"--sysctl",
"net.ipv6.conf.default.disable_ipv6=0", // some environments need this also
"--sysctl",
"net.ipv6.conf.all.forwarding=1", // for packet forwarding if needed
])
- "--internal" 网络参数在某些平台上并没有达到预期的效果,即使在某些WSL 2 Linux发行版上也是如此。
依赖项
~7–16MB
~195K SLoC