image

工具背景

如今,docker镜像常用于工具的分发,demo的演示,第一步就是得创建docker镜像。
一般入门都会安装docker,然后用dockerFile来创建镜像,除此以外你还想过有更高效的方式吗?

image

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

image

工具使用

它是一个纯粹构建镜像命令行工具,根据不同的功能有不同的参数,如下图

windows平台

image
macos平台

image

作为一个纯粹的构建镜像工具,它不需要依赖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服务 欢迎试用~

关于我

image

微软最有价值专家(MVP),.NET 技术专家,热爱开源,关注并喜欢研究前沿技术,热衷于技术和经验分享,长期撰写技术博客,活跃于开源社区。

创建镜像发布到镜像仓库【不依赖docker环境】的更多相关文章

  1. 无需依赖Docker环境制作镜像

    随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢? ...

  2. docker之常用命令、自定制镜像、公(私)仓库的上传和下载

    一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...

  3. docker核心概念(镜像、容器、仓库)及基本操作

    概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...

  4. Docker镜像推送(push)到Docker Hub

    镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.我们之前创建的镜像不符合Docker Hub的tag要求,因为 在Docker Hub注册的用户名是boo ...

  5. win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址

    通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...

  6. Docker将自己的镜像发布到个人私有仓库

    Docker将自己的镜像发布到个人私有仓库 1.注册dockerhub账户 docker提供了一个类似于github的仓库dockerhub, 网址https://hub.docker.com/需要注 ...

  7. 【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务

    欢迎使用 Blazor!Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的 ...

  8. 程序员修神之路--打通Docker镜像发布容器运行流程

    菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊 还有哪不明白呢? 如果我想用docker实现所谓的云原生,我的项目该怎么发布呢? 这还是要详细介绍一下docker了 Docker 是一个开 ...

  9. [开源]制作docker镜像不依赖linux和Docker环境

    背景 最近群友们经常反馈docker镜像制作起来有点麻烦,我开源的antdeploy工具虽然可以制作镜像但是必须有一个提前:有一台安装好docker的linux服务器.因为大家开发环境基本上都是win ...

  10. 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

随机推荐

  1. JLink OB SWI 取代串口打印的方式

    1:debug的串口被占用 2:从Keil 迁移到的LINUX下开发. 3:手上只有JLinkOB,(4线:CLK,SWIO,GND,RST) 4:设备只引出了4线(SWO 没接出) 环境: JLin ...

  2. vxe-table 合并单元格

    <vxe-table @cell-click="handleClickCell" :span-method="spanMethods" //自动合并单元格 ...

  3. SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated

    错误提示: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in ...

  4. Codeforces Round #843 (Div. 2) Problem C

    C. Interesting Sequence time limit per test 1 second memory limit per test 256 megabytes input stand ...

  5. vue项目安装淘宝镜像一直失败,解决办法

    这个问题纠缠了我好几天,刚开始把npm,node卸载了重装,发现还是一样的问题,最后发现是权限不够,下面这个方法完美解决 失败原因:没有用管理员权限执行, 解决办法:找到安装nodejs安装的路径,再 ...

  6. 线程池使用、countDownLatch、以及数据库批量插入 添加配置优化插入与计算

    //新建线程池ThreadPoolExecutor cpuThreadPoolExecutor = ThreadUtil.getCpuThreadPoolExecutor(); //使用Countdo ...

  7. 复习笔记,javadoc生成文档总结

    1.处理数字时候的内存溢出问题       //在处理大数字时候注意内存溢出问题        int i=10_0000_0000; //jdk7 中数字之间可以加入下划线不影响输出         ...

  8. Vuex----Getters

    Getter 用于对 Store中的数据进行加工处理形成新的数据. Getter 不会修改 Store 中的原数据,它只起到一个包装器的作用,将Store中的数据加工后输出出来. const stor ...

  9. 吴恩达机器学习-终于完成ex4

    几年前就想学习吴恩达的老课-机器学习,学了n次都没有坚持下来.其实很多东西都是这样,开始的时候信誓旦旦,信心满满,慢慢的就泄气了. 每天铺天盖地的深度学习,人工智能听得耳朵都要起茧子了.这算法,那框架 ...

  10. vue项目启动报错问题解决. Module build failed: Error: Node Sass does not yet support your current environment

    导入vue项目后,启动报错,异常如下: 1 error in ./src/pages/home.vue 2 Module build failed: Error: Node Sass does not ...