是否有可能在没有安装docker的情况下构建映像。在我的项目的maven构建中,我想生成docker图像,但我不想强迫其他人在他们的机器上安装docker。
我可以想到一些安装了docker的虚拟盒子图像,但它是一种沉重的解决方案。有没有办法用一些maven插件来构建图像,一些Go代码或已经准备好的虚拟盒图像用于这个目的?
它归结为如何使用docker而不强迫用户安装任何东西。无论是用于构建还是用于运行docker镜像。
UPDATE
有一些,不是真正最新的maven插件,用于虚拟机配置with vagrant或with vbox。我找到了关于构建docker images without docker on basel的文章到目前为止我看到两个选项要么我可以以某种方式构建图像,要么运行一些带有docker守护进程的VM(不仅可以用于构建,甚至可以用于集成测试)
我们可以在没有安装Docker的情况下创建Docker镜像。
Jib Maven和Gradle插件
谷歌有一个名为Jib的开源工具,它相对较新,但出于多种原因非常有趣。可能最有趣的是你不需要docker来运行它 - 它使用与docker build相同的标准输出构建图像,但除非你要求它才使用docker - 所以它适用于未安装docker(在构建服务器中并不罕见)。您也不需要Dockerfile(无论如何都会被忽略),或pom.xml中的任何内容来获取Maven中构建的图像(Gradle会要求您至少在build.gradle中安装插件)。
Jib的另一个有趣的特性是它对层的看法,并且它以与上面创建的多层Dockerfile略有不同的方式对它们进行优化。就像在fat jar中一样,Jib将本地应用程序资源与依赖项分开,但它更进一步,并且还将快照依赖项放入单独的层中,因为它们更有可能发生更改。有进一步自定义布局的配置选项。
请参考此链接https://cloud.google.com/blog/products/gcp/introducing-jib-build-java-docker-images-better
例如,使用Spring Boot参考https://spring.io/blog/2018/11/08/spring-boot-in-a-container
看看以下工具:
fabric8-maven-plugin将您的Java应用程序带到Kubernetes和OpenShift。它提供了与Maven的紧密集成,并从已提供的构建配置中获益。这个插件专注于两个任务:构建Docker镜像和创建Kubernetes和OpenShift资源描述符。
如果你有一个Kubernetes / Openshift集群,fabric8-maven-plugin似乎特别合适。它使用Openshift API构建并可选择将映像直接部署到您的集群。
我能够非常快速地build and deploy他们的zero-config spring-boot示例,没有必要的Dockerfile,只需编写您的应用程序代码,它负责所有的样板。
假设您已经从桌面连接到OpenShift的基本设置,它将把项目.jar打包到容器中并在Openshift上启动它。最小的maven配置是将插件添加到pom.xml build / plugins部分:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>3.5.41</version>
</plugin>
然后使用构建+部署
$ mvn fabric8:deploy
如果您需要更多控制并且更喜欢管理自己的Dockerfile,它也可以处理这个,这在samples/secret-config中显示。
Buildah是一种有助于构建Open Container Initiative(OCI)容器映像的工具。该软件包提供了一个命令行工具,可用于:
谷歌已经为此发布了Kaniko。它应该作为容器运行,无论是在Kubernetes,Docker还是gVisor中。
我不想强迫其他人在他们的机器上安装docker。
如果“没有Docker安装”你的意思是不必在运行构建的每台机器上本地安装Docker,你可以利用Docker Engine API,它允许你从远程主机调用Docker守护进程。
Docker Engine API是一个RESTful API,由HTTP客户端(如wget或curl)或HTTP库(它是大多数现代编程语言的一部分)访问。
例如,Fabric8 Docker Maven Plugin只使用DOCKER_HOST
参数。你需要一个最新的Docker版本,你必须正确配置至少一个Docker守护进程,这样才能安全地接受远程请求(这个主题有很多资源,比如official doc,here或here)。从那时起,您可以远程完成Docker构建,而无需在本地安装Docker。
我遇到了同样的问题,我没有找到任何解决方案,因此我开发了odagrun,它是Gitlab的跑步者,集成了注册表api,更新了DockerHub,Microbadger等。
OpenSource并拥有MIT许可证。
非常适合动态创建docker镜像,无需docker守护程序,也不需要root帐户,或者根本不需要任何图像(image:scratch会这样做),目前仍处于开发阶段,但我每天都在使用它。
要求
提取如何创建此项目的docker镜像:
# create and push image to ImageStream:
build_rootfs:
image: centos
stage: build-image
dependencies:
- build
before_script:
- mkdir -pv rootfs
- cp -v output/oc-* rootfs/
- mkdir -pv rootfs/etc/pki/tls/certs
- mkdir -pv rootfs/bin-runner
- cp -v /etc/pki/tls/certs/ca-bundle.crt rootfs/etc/pki/tls/certs/ca-bundle.crt
- chmod -Rv 777 rootfs
tags:
- oc-runner-shared
script:
- registry_push --rootfs --name=test-$CI_PIPELINE_ID --ISR --config