需要知道如何使用Groovy来自动化Docker构build和运行时

我有一个任务来容纳一个Spring&Reactnetworking应用程序,这样非技术人员就可以利用这个容器向客户端演示这个应用程序。 目前,我们在OSX上进行开发,部署到由第三方公司pipe理的AWS上的Tomcat,非技术人员使用Windows笔记本电脑。 到目前为止,我在OSX中创build了一个bash脚本,它将创build一个包含Java 8 SDK和Maven的Packager容器,并将该应用程序编译成一个war文件。 第二个脚本创build并初始化一个mongodb容器并为其命名,第三个脚本创build一个Tomcat / Java 8容器,将war文件加载到该容器中,并将其链接到mongodb容器并将其设置为运行。 在OSX的bash上,这个工作正常,但是我发现如果我在Windows 10的cygwin上尝试它,我的CMD / Powershell-fu太弱,无法以Windows本机方式编写脚本。

所以,我正在尝试在OSX,AWS Linux服务器和Windows 10上运行的脚本,以及我自认为是Groovy的Java开发人员。 这是我第一次使用Groovy脚本化Docker,所以我最终使用了如下的结构:

println "docker build -f Dockerfile.packager -t mycontainer .".execute().text 

我想知道Docker是否有一个Java或Groovy API,可以插入并执行如下操作:

 docker.build("Dockerfile.packager").tag("mycontainer") 

目前,我的脚本正在确定项目根目录的位置,并将Docker运行命令构build为string,如下所示:

 File emToo = new File(System.getProperty("user.dir")+"/.m2") String currentDirectory = new File(".").getCanonicalPath() String projectRoot = new File(currentDirectory+"/../").getCanonicalPath() 

我通过命令行提示符从用户那里得到一个选项string,“你想要QA还是Dev?” & 然后:

 String dockerRunCmd = "docker run -it -v $projectRoot/:/usr/local/build/myproject:cached -v ${emToo.getCanonicalPath()}:/root/.m2:cached mycontainer $option" println dockerRunCmd.execute().text 

目前似乎没有做任何事情后,要求的select – 这有点轰炸。 我得到的运行命令输出到屏幕上,如果我复制/粘贴到脚本目录中的命令行中,它说,无法find父POM。 请记住,如果我运行OSX bash脚本来做到这一点,它工作得很好。 bash脚本基本上是:

 #! /usr/bin/env bash CWD=`pwd` options=$1 docker run -it -v $CWD/../:/usr/local/build/myproject:cached -v ~/.m2:/root/.m2:cached --rm mycontainer $options 

…我认为这是相同的事情,对不对? 哪里出问题了?

更新:我发现了一个错误 – 我应该设置emToo到new File(System.getProperty("user.home")+"/.m2") 。 user.dir只是拿起当前目录,maven .m2目录通常位于用户的家中。 目前,脚本给了我一个运行命令,如果我剪切/粘贴到命令行,但不允许我在Groovy中的string上调用.execute()。 如果我能做到这一点,那么就不需要build议的docker客户端项目。

有不同的方式与groovy或java的docker进行通信(sdk's列在那里https://docs.docker.com/engine/api/sdks/#other-languages ):

在github上也可以find许多其他的东西。

但正如我看到你使用的Maven所以可能会更容易使用真棒dockermaven插件( https://dmp.fabric8.io ),可以build立,推图像,运行容器等

Interesting Posts