创建镜像发布到镜像仓库【不依赖docker环境】
工具背景
如今,docker镜像常用于工具的分发,demo的演示,第一步就是得创建docker镜像。
一般入门都会安装docker,然后用dockerFile来创建镜像,除此以外你还想过有更高效的方式吗?
Google开发的jib不依赖docker环境也能创建docker或者OCI类型的镜像,但是可惜它只为java应用而生,其他类型的比如nodejs,.net应用都无法用,而且它是作为maven/gradle的插件形式来工作的,而不是一个纯粹独立构建镜像的工具。
介于上述原因,来介绍我开发的这款工具,名字也叫jib,只不过它是一个纯粹构建镜像工具,支持win,linux,osx三个平台
我的口号是:
Build container images for your any applications.
功能包含:
构建镜像推送到镜像仓库(dockerhub/aliyun/tencent共有仓库,harbor等私有仓库) 构建镜像推送到本地docker环境 构建镜像生成tar格式镜像文件到本地
工具地址: https://github.com/yuzd/jib
工具使用
它是一个纯粹构建镜像命令行工具,根据不同的功能有不同的参数,如下图
windows平台
macos平台
作为一个纯粹的构建镜像工具,它不需要依赖docker环境,只需要读取一个json配置文件,根据配置生成镜像
json配置文件
命令: jib.exe -push --configfile=demo.json
推送到镜像仓库的配置示例(从阿里云镜像仓库拉取base镜像+我要加的目录=新的镜像并推送到私有仓库):
{
"BaseHttpProxy": "",
"BaseImage": "ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2",
"BaseImageCredential": {
"UserName": "aaaaaaaa",
"Password": "xxxxx"
},
"TargetHttpProxy": "",
"TargetImage": "http://127.0.0.1:5000/test1",
"TargetTags": [
"1.0.1"
],
"TargetImageCredential": {
"UserName": "aaaa",
"Password": "xxxx"
},
"ImageFormat": "Docker",
"ImageLayersFolder": "E:\\workspace\\demo\\publish",
"ImageWorkingDirectory": "/publish",
"Entrypoint": [
"dotnet"
],
"Cmd": [
"/publish/RazorTestProject.dll"
],
"ApplicationLayersCacheDirectory": "E:\\workspace\\cache",
"SkipExistingImages":true,
"IgnoreList":[
"支持正则"
]
"Env":{
"env1":"value1"
},
"Ports":[
{
"port":8080,
"protocol":"tcp"
}
],
"Volumes":[
"/var/log",
"/var/log2"
]
}
| 字段名 | 含义 | 备注 |
|---|---|---|
| BaseHttpProxy | 代理 | 拉取基础镜像的时候看你需要,格式 ip:port |
| BaseImage | 基础镜像地址 | 完整地址,包含了版本,如果仓库地址没有https,请在最前面加上http:// |
| BaseImageCredential | 拉取基础镜像如果要登录 | 账户名+密码 |
| TargetHttpProxy | 代理 | 只有在推送到远程镜像且你有需要,才需要配置 格式ip:port |
| TargetImage | 目标镜像 | 要推送的目标镜像仓库地址,不包含版本,如果仓库地址没有https,请在最前面加上http:// |
| TargetTags | 镜像标签 | 可以理解为版本号 |
| TargetImageCredential | 如果目标镜像仓库要登录 | 账户名+密码 |
| ImageFormat | 镜像仓库构建格式 | Docker和OCI两种 |
| ImageLayersFolder | 要打包进镜像仓库的目录 | 通常这就是你的项目成果物 |
| ImageWorkingDirectory | 打包的目标仓库的工作目录 | 如果设置那你的文件们都会在这个目录下工作 |
| Entrypoint | 镜像启动的入口 | 比如dotnet |
| Cmd | 镜像启动执行的参数 | 供Entrypoint使用 |
| ApplicationLayersCacheDirectory | 程序在运行时候会产生缓存目录来加快下次构建速度 | 可以不指定,会用temp目录 |
| Env | 环境变量 | 可以不指定,容器启动指定也行 |
| Ports | 端口 | 可以不指定,容器启动指定也行 |
| Volumes | 共享目录 | 可以不指定,容器启动指定也行 |
| SkipExistingImages | 如果目标仓库有一模一样的镜像就不会上传 | 比对的是镜像sha256 |
| IgnoreList | 要打包的目录里面可以排除某些文件 | 正则表达式 |
tar格式镜像文件本地生成
命令: jib.exe -tar --configfile=demo.json --outfile=demo.tar
示例
{
"BaseHttpProxy": "",
"BaseImage": "ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2",
"BaseImageCredential": {
"UserName": "aaaaaaaa",
"Password": "xxxxx"
},
"ImageFormat": "Docker",
"ImageLayersFolder": "E:\\workspace\\demo\\publish",
"ImageWorkingDirectory": "/publish",
"Entrypoint": [
"dotnet"
],
"Cmd": [
"/publish/RazorTestProject.dll"
]
}
json配置参数就少了推送相关的参数
本地tar文件的镜像,可以通过docker load命令在装载到docker环境中。
推送镜像到本机的docker环境
命令: jib.exe -deamon --configfile=demo.json
json配置和tar差不多
写到最后
该工具支持多平台(linux、win、mac) 17M左右大小,不依赖docker环境,独立构建镜像速度很快,除了第一次基础镜像的拉取需要时间,有缓存的话只需要几秒搞定 适用于在CICD流水线中使用。
我也集成到了我的AntDeploy一键发布工具中, 开源地址: https://github.com/yuzd/AntDeploy .net应用可以下载AntDeploy Vs插件, 可以在vs中一键发布镜像推送到镜像仓库功能,还支持一键部署到iis,windows/linux服务 欢迎试用~
关于我
微软最有价值专家(MVP),.NET 技术专家,热爱开源,关注并喜欢研究前沿技术,热衷于技术和经验分享,长期撰写技术博客,活跃于开源社区。

创建镜像发布到镜像仓库【不依赖docker环境】的更多相关文章
- 无需依赖Docker环境制作镜像
随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢? ...
- docker之常用命令、自定制镜像、公(私)仓库的上传和下载
一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...
- docker核心概念(镜像、容器、仓库)及基本操作
概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...
- Docker镜像推送(push)到Docker Hub
镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.我们之前创建的镜像不符合Docker Hub的tag要求,因为 在Docker Hub注册的用户名是boo ...
- win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址
通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...
- Docker将自己的镜像发布到个人私有仓库
Docker将自己的镜像发布到个人私有仓库 1.注册dockerhub账户 docker提供了一个类似于github的仓库dockerhub, 网址https://hub.docker.com/需要注 ...
- 【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
欢迎使用 Blazor!Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的 ...
- 程序员修神之路--打通Docker镜像发布容器运行流程
菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊 还有哪不明白呢? 如果我想用docker实现所谓的云原生,我的项目该怎么发布呢? 这还是要详细介绍一下docker了 Docker 是一个开 ...
- [开源]制作docker镜像不依赖linux和Docker环境
背景 最近群友们经常反馈docker镜像制作起来有点麻烦,我开源的antdeploy工具虽然可以制作镜像但是必须有一个提前:有一台安装好docker的linux服务器.因为大家开发环境基本上都是win ...
- 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
随机推荐
- mybatis lombok 报错: java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor
1. 报错原因:jdk版本太高,lombok版本太低 2. 解决办法:安装更高版本的依赖包,可以去Maven Repository: lombok去查:https://mvnrepository.co ...
- FastReport和RDLC报表
最近在做报表的时候第一次接触到RDLC报表,对比于之前使用的FastReport报表来说,在使用体验上个人目前感觉RDLC灵活性相对较差,尤其是表格的格式多样的时候,不易修改.RDLC应用于格式简单的 ...
- 前端自动化测试框架Cypress环境搭建
1. 下载安装node.js(之前的随笔里写过安装nodejs具体步骤这里不过多介绍了) 下载地址:https://nodejs.org/en/ 2.安装路径(这是安装完成nodejs的路径) 3. ...
- NS-Atmosphere payload Programmer
NS-Atmosphere payload Programmer 通过该软件将任意payload烧写到NS-Atmosphere 注入器中, 兼容windows, ubuntu, 苹果 MAC OS ...
- Java流程控制1
Scanner对象 java.util.Scanner 通过Scanner类来获取用户输入 next()和nextline()来获取输入的字符串,读取前我们一般需要使用hasnext()和hasnex ...
- vue.js拓展无法启用
vue.js拓展无法启用 这里我以自己的谷歌浏览器演示 C:\Users\维磊\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhd ...
- Linux命令之定时调度-crontab
以上cron命令格式为:* * * * * [root run-parts] command 前面五个*号代表时间,用数字,数字的取值范围和含义如下: 第一个*:分钟 (0-59)[整数] 第二个*: ...
- C/C++ 异常处理机制(例:文件拷贝)
异常是一种程序控制机制,与函数机制互补. 函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现"意外"时中断当前函数,并以某种机制(类型匹配)回馈 ...
- C# 将实体转xml/xml转实体
xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...
- 统信桌面端专业版开启cron日志,确认定时任务执行情况
默认没有开启cron日志记录 1. 修改rsyslog vi /etc/rsyslog.conf #将cron前面的注释符去掉 cron.* /var/log/cron.log 排查完毕需关闭,重新注 ...