gofn, 通过 Docker 提供程序进行功能处理( 无服务器的极简程序)

分享于 

6分钟阅读

GitHub

  繁體 雙語
Function process via container provider (serverless minimalist)
  • 源代码名称:gofn
  • 源代码网址:http://www.github.com/gofn/gofn
  • gofn源代码文档
  • gofn源代码下载
  • Git URL:
    git://www.github.com/gofn/gofn.git
    Git Clone代码到本地:
    git clone http://www.github.com/gofn/gofn
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/gofn/gofn
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    gofn

    Build StatusGoDocGo Report CardcodecovJoin the chat at https://gitter.im/gofn/gofnOpen Source Helpers

    通过 Docker 提供程序实现功能流程

    安装

    
    
    
    
    go get github.com/gofn/gofn
    
    
    
    

    示例

    
    
    
    
    package main
    
    
    
    import (
    
    
     "context"
    
    
     "flag"
    
    
     "fmt"
    
    
     "log"
    
    
     "runtime"
    
    
     "sync"
    
    
    
     "github.com/gofn/gofn"
    
    
     "github.com/gofn/gofn/iaas/digitalocean"
    
    
     "github.com/gofn/gofn/provision"
    
    
    )
    
    
    
    func main() {
    
    
     wait := &sync.WaitGroup{}
    
    
     contextDir := flag.String("contextDir", "./", "a string")
    
    
     dockerfile := flag.String("dockerfile", "Dockerfile", "a string")
    
    
     imageName := flag.String("imageName", "", "a string")
    
    
     remoteBuildURI := flag.String("remoteBuildURI", "", "a string")
    
    
     volumeSource := flag.String("volumeSource", "", "a string")
    
    
     volumeDestination := flag.String("volumeDestination", "", "a string")
    
    
     remoteBuild := flag.Bool("remoteBuild", false, "true or false")
    
    
     input := flag.String("input", "", "a string")
    
    
     flag.Parse()
    
    
     parallels := runtime.GOMAXPROCS(-1) // use max allowed CPUs to parallelize
    
    
     wait.Add(parallels)
    
    
     for i := 0; i <parallels; i++ {
    
    
     go run(*contextDir, *dockerfile, *imageName, *remoteBuildURI, *volumeSource, *volumeDestination, wait, *remoteBuild, *input)
    
    
     }
    
    
     wait.Wait()
    
    
    }
    
    
    
    func run(contextDir, dockerfile, imageName, remoteBuildURI, volumeSource, volumeDestination string, wait *sync.WaitGroup, remote bool, input string) {
    
    
     buildOpts := &provision.BuildOptions{
    
    
     ContextDir: contextDir,
    
    
     Dockerfile: dockerfile,
    
    
     ImageName: imageName,
    
    
     RemoteURI: remoteBuildURI,
    
    
     StdIN: input,
    
    
     }
    
    
     containerOpts := &provision.ContainerOptions{}
    
    
     if volumeSource!= "" {
    
    
     if volumeDestination == "" {
    
    
     volumeDestination = volumeSource
    
    
     }
    
    
     containerOpts.Volumes = []string{fmt.Sprintf("%s:%s", volumeSource, volumeDestination)}
    
    
     }
    
    
     if remote {
    
    
     buildOpts.Iaas = &digitalocean.Digitalocean{}
    
    
     }
    
    
    
     defer wait.Done()
    
    
     stdout, stderr, err := gofn.Run(context.Background(), buildOpts, containerOpts)
    
    
     if err!= nil {
    
    
     log.Println(err)
    
    
     }
    
    
     fmt.Println("Stderr: ", stderr)
    
    
     fmt.Println("Stdout: ", stdout)
    
    
    }
    
    
    
    

    运行示例

    
    
    
    
    cd examples
    
    
    
    go run main.go -contextDir=testDocker -imageName=python -dockerfile=Dockerfile
    
    
    
    # or using volume
    
    
    go run main.go -contextDir=testDocker -imageName=python -dockerfile=Dockerfile -volumeSource=/tmp -volumeDestination=/tmp
    
    
    
    # or using remote Dockerfile
    
    
    go run main.go -remoteBuildURI=https://github.com/gofn/dockerfile-python-example.git -imageName="pythonexample"
    
    
    
    # you can also send a string that will be written to the stdin of the container
    
    
    go run main.go -contextDir=testDocker -imageName=python -dockerfile=Dockerfile -input "input string"
    
    
    
    # or run in digital ocean
    
    
    export DIGITALOCEAN_API_KEY="paste your key here"
    
    
    go run main.go -contextDir=testDocker -imageName=python -dockerfile=Dockerfile -remoteBuild=true
    
    
    
    

    你还可以使用编译构建构建安装和安装命令go然后将它作为本机可执行文件运行。

    示例参数

    • -contextDir是 root 目录,在默认情况下,Dockerfile。脚本和其他容器依赖项是当前目录"。/"。

    • -imageName是要启动的图像名称,如果它不存在,它将自动生成,如果它存在,则仅启动容器。

    • -dockerFile是包含容器设置的文件的名称,默认情况下为 Dockerfile

    • -volumeSource是将作为数据卷挂载的目录。 默认情况下为空字符串表示未使用。

    • -volumeDestination是装入容器内的路径。 默认情况下是空字符串指示他没有使用,但如果只是省略,则使用 volumeSource。

    • -remoteBuildURI的远程URI包含Dockerfile到 build.By 默认值为空。 更详细的 Docker api文档。

    • remoteBuild是一个布尔值,指示是否必须运行localally或者在 Digital Ocean 中的计算机中不要忘记导出api密钥。

    • -input是一个将被写入容器的stdin的字符串

    • -h显示参数列表

    gofn用"gofn/"作为前缀生成图像。


    Server  DOC  PROC  FUNC  函数  Docker  
    相关文章