【问题标题】:How to change driver from Docker to Mocker如何将驱动程序从 Docker 更改为 Mocker
【发布时间】:2018-07-20 11:38:19
【问题描述】:

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

【问题讨论】:

    标签: fn


    【解决方案1】:

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

    为了使用模拟程序等替代驱动程序进行构建,用户将在创建代理时使用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 并弄清楚把它放在哪里:)

    【讨论】:

    • 非常感谢,有时间我会研究的。不,我真的不想使用 rkt,因为我的经验与它相同(它非常慢......)。取而代之的是,我有点想对虚拟机进行调查,但我必须看看它是否值得做。
    猜你喜欢
    • 2017-10-03
    • 2017-01-06
    • 2013-10-24
    • 2021-12-01
    • 2016-08-19
    • 2015-07-03
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多