[开源]制作docker镜像不依赖linux和Docker环境
背景
最近群友们经常反馈docker镜像制作起来有点麻烦,我开源的antdeploy工具虽然可以制作镜像但是必须有一个提前:有一台安装好docker的linux服务器。因为大家开发环境基本上都是windows。为了制作镜像专门搞一台linux服务器有点浪费,也很麻烦。需要一种技术能制作docker镜像不依赖linux环境且脱离于docker环境
技术调研
谷歌有一个开源项目 https://github.com/GoogleContainerTools/jib
这个应该就是我想要的了,但是这个开源项目主要是提供 maven插件 和 gradle插件来 快速制作镜像
如何让它脱离maven或者gradle环境的束缚来提供服务呢。
只能参考谷歌的java代码自己实现一个能够跨平台的解决方案
技术成果
这里我采用了微软的asp5.0技术一比一仿写了google的jib项目。
目前我已经集成到我的开源项目AntDeploy(一键部署发布工具)里面
支持功能如下:
-
一键制作镜像并发布到dockerhub仓库
-
一键制作镜像并发布到阿里云镜像仓库
-
一键制作镜像并发布到腾讯云镜像仓库
注意:采用标准的auth协议的镜像仓库都支持一键推送
如何使用
支持下面2种方式使用
-
vs插件方式(可以直接项目右键,一键搞定)
-
独立软件方式(可以发布java等其他语言)
这里以vs插件方式示例
下面演示创建一个aspnet5.0的web项目并采用antdeploy插件一键创建docker镜像发布到阿里云镜像仓库,然后在linux服务器上跑起来这个web项目
使用的环境:
-
Visualstuido 2019
-
已安装AntDeploy插件最新版
创建工程(testimagepush)如下图:步骤(略)
在工程文件点击鼠标右键,找到AntDeploy
打开AntDeploy如下图:
配置参数
From里面要填参数的意思:
名称 | 含义 |
---|---|
基础镜像 | 等同于DockerFile里面的from |
UserName | 如果你用的基础镜像是私有的话就需要,阿里云或腾讯云也需要 |
Pwd | 如果你用的基础镜像是私有的话就需要,阿里云或腾讯云也需要 |
Http代理 | 在拉取这个基础镜像的时候如果是需要科学访问(特别是dockerhub)的话就需要用这个了 |
To里面要填参数的意思:
名称 | 含义 |
---|---|
目标镜像 | 这个是你要推送到的镜像仓库地址(下面会举例阿里云,腾讯云,dockerhub,详细看下面解说的例子) |
UserName | 如果你推送的镜像仓库是私有的话就需要,阿里云或腾讯云也需要 |
Pwd | 如果你推送的镜像仓库是私有的话就需要,阿里云或腾讯云也需要 |
Http代理 | 在推送生创建好的镜像的时候如果是需要科学访问(特别是dockerhub)的话就需要用这个了 |
EntryPoint | 你的镜像的运行入口点 |
CMD | 入口点要带的一些参数 多个用->隔开 |
玩过docker的人上面的参数应该比较熟悉,因为创建一个docker镜像至少需要这么些配置
如上图:
-
因为我是5.0项目所以我用的是官方的5.0镜像
-
因为基础镜像在国外我配置了代理加速pull
-
目标镜像是配置的阿里云镜像仓库的地址(你开通了阿里云镜像仓库功能注意得开启自动创建的功能)
-
因为阿里云的镜像仓库需要账户名和密码所以得配置上
-
EntryPoint程序入口点为dotnet
-
参数写的是当前项目dll(这么配的意思就是如果你跑这个镜像生成的容器就会默认启动你的应用)
如果你需要将某些文件排除打包的话可以在【其他配置】进行配置
点击发布按钮
可以查看详细日志:
16:26:52|INFO|-----------------Start publish[Ver:7.30]-----------------
16:26:52|INFO|Visual Studio Version : 16.0
16:26:52|INFO|CurrentProjectFolder: file://C:\Users\Administrator\source\repos\testimagepush\testimagepush#link3
16:26:52|INFO|