如何将驱动程序从 Docker 更改为 Mocker

How to change driver from Docker to Mocker

我只是有点好奇是否有办法与 docker 一起使用模拟驱动程序或代替模拟驱动程序?如果有多个,fn 甚至如何决定使用哪一个?原因是,如果可能的话,我可能会尝试为另一个容器引擎实现另一个真正的驱动程序。 到目前为止,我设法让 mocker 显示为驱动程序,但仍然没有找到如何让 fn 使用它而不是 docker。

这里有一个构建带扩展的 fn 的示例:https://github.com/fnproject/fn/blob/master/examples/extensions/main.go#L16 -- 对于使用自定义驱动程序构建,目前它需要使用相同的过程(即无法配置另一个驱动程序在运行时从 fn 核心的二进制文件而不扩展它)。

为了使用 mocker 等替代驱动程序进行构建,用户可以在创建代理时使用 agent.WithDockerDriver 选项来指定驱动程序,记录在此处 https://godoc.org/github.com/fnproject/fn/api/agent#AgentOption 和示例如下:

func main() {
  mocker := mock.New()
  // configure logstore, mq
  da := agent.NewDirectCallDataAccess(logstore, mq)
  magent := agent.New(da, agent.WithDockerDriver(mocker))

  fns := server.New(server.WithAgent(magent), /*other options*/)
  fns.Start(context.Background())
}

我们需要整理代理界面,使它们更容易创建(数据访问的东西很复杂),但还算不错。其中大部分可以从这个文件中窃取 https://github.com/fnproject/fn/blob/master/api/server/server.go -- 我们也需要将它命名为 WithDriver :)

假设您正在考虑在后端使用 rkt 之类的东西或更强大的驱动程序,可以通过实现驱动程序接口将其连接起来,过去我们已经尝试过但我们不会维护它存在,因为它不是一个可行的选择(性能问题,也许此后有所改善)。看看你是否设法让 rkt 工作会很酷,很高兴为它申请 PR 并弄清楚把它放在哪里:)