docker - 需要知道如何使用 Groovy 自动化 Docker 构建和运行时

标签 docker groovy multiplatform

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

因此,我尝试使用可以在 OSX、AWS Linux 服务器和 Windows 10 上运行的脚本编写脚本,而作为一名 Java 开发人员,我想到了 Groovy。这是我第一次使用 Groovy 编写 Docker 脚本,所以我最终采用了如下结构:

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

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

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

当前我的脚本正在确定项目根目录的位置并将 Docker 运行命令构建为字符串,例如:

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

我通过命令行提示符从用户那里得到一个选项字符串,“你想要 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

目前,在询问该选项后,它似乎没有做任何事情 - 它有点爆炸。我将运行命令输出显示到屏幕上,如果我将其复制/粘贴到脚本目录中的命令行中,则会出现无法找到父 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 中的字符串上调用 .execute() 。如果我能让它工作,就不需要建议的 docker-client 项目。

最佳答案

从 groovy 或 java 与 docker 通信的方式有多种(sdk 列于 https://docs.docker.com/engine/api/sdks/#other-languages ):

许多其他内容也可以在 github 上找到。

但是正如我所看到的,您正在使用 Maven,所以您可能会更容易使用很棒的 docker maven 插件( https://dmp.fabric8.io ),它可以构建、推送图像、运行容器等。

关于docker - 需要知道如何使用 Groovy 自动化 Docker 构建和运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44022472/

相关文章:

docker - 如何在 Kubernetes 中传递 Docker CLI `--gpus` 选项或启用 GPU 支持而不安装 `nvidia-docker2` (Docker 19.03)

docker - 如何在 Docker 容器中启动 LXC 容器

docker 。如何将参数传递给 FROM 子句?

git - 如何 checkin 文件以使用 git 构建?

Javafx + FXML + Accelerators --- 平台独立性?

c - 多平台支持、预处理程序或与各个库的链接

mysql - Docker - 如何查看 MySQL 卷中的表?

grails - shouldFailWithCause测试失败

java - ActiveMQ RedeliveryPolicy 未设置

c - 如何以独立于平台的方式 fork 、等待和终止进程?