在没有安装docker的情况下以某种方式构建映像是否可行。在我的项目的maven构建中,我想制作码头图像,但我不想强迫其他人在他们的机器上安装docker。
我可以想到安装了docker的虚拟盒子图像,但它是一种沉重的解决方案。有没有办法用一些maven插件来构建图像,一些Go代码或已经准备好的虚拟盒子图像用于这个目的?
归结为如何使用docker而不强迫用户安装任何东西。无论是用于构建还是用于运行docker镜像。
更新
虚拟机资源调配with vagrant或with vbox有一些非真正最新的maven插件。我找到了关于构建docker images without docker on basel的文章 到目前为止,我看到两个选项要么我可以以某种方式构建图像,要么运行一些带有docker守护进程的VM(不仅可以用于构建,甚至可以用于集成测试)
答案 0 :(得分:4)
我们可以在不安装Docker的情况下创建Docker映像。
Jib Maven和Gradle插件
Google有一个名为Jib的开源工具,它相对较新,但是 有很多原因,这很有趣。可能是最有趣的 问题是您不需要docker来运行它-它使用以下命令构建映像 与您从docker build获得的标准输出相同,但未使用 docker除非您要求-否则它可以在docker是 未安装(在构建服务器中并不罕见)。您也不需要 Dockerfile(无论如何都会被忽略),或者您pom.xml中的任何内容 获取在Maven中构建的映像(Gradle将要求您至少安装 build.gradle中的插件)。
Jib另一个有趣的功能是对 层,并以与多层 上面创建的Dockerfile层。就像在胖胖的罐子里一样,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
答案 1 :(得分:1)
看看以下工具:
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构建/插件部分:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>3.5.41</version>
</plugin>
然后使用构建并部署
$ mvn fabric8:deploy
如果您需要更多控制权而更喜欢管理自己的Dockerfile,它也可以处理,如samples/secret-config所示。
Buildah是有助于构建开放式容器倡议(OCI)容器映像的工具。该软件包提供了一个命令行工具,可用于:
答案 2 :(得分:1)
Google为此发布了Kaniko。无论是在Kubernetes,Docker还是gVisor中,它都应作为容器运行。
答案 3 :(得分:0)
我不想强迫其他人在他们的机器上安装docker。
如果“没有安装Docker ”是指而无需在运行构建的每台计算机上本地安装Docker ,则可以利用允许的Docker Engine API你从远方的主机上调用Docker守护进程。
Docker Engine API是由HTTP客户端访问的RESTful API 作为wget或curl,或者是最现代化的HTTP库 编程语言。
例如,Fabric8 Docker Maven Plugin只使用DOCKER_HOST
参数。你需要一个最新的Docker版本,你必须正确配置至少一个Docker守护进程,这样才能安全地接受远程请求(这个主题有很多资源,例如official doc,{{3 }或here)。从那时起,您可以远程完成Docker构建,而无需在本地安装Docker。
答案 4 :(得分:0)
我遇到了同样的问题,但没有找到任何解决方案,因此我开发了odagrun,它是具有集成注册表api,更新DockerHub,Microbadger等的Gitlab的赛跑者。
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