首页 > 其他分享 >创建镜像发布到镜像仓库【不依赖docker环境】

创建镜像发布到镜像仓库【不依赖docker环境】

时间:2023-03-26 15:14:28浏览次数:48  
标签:仓库 demo json 镜像 docker 推送

image
image

工具背景

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

image
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
image

工具使用

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

windows平台
image
image
macos平台
image
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
image

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

 

标签:仓库,demo,json,镜像,docker,推送
From: https://www.cnblogs.com/yudongdong/p/17258695.html

相关文章

  • git仓库瘦身
    1.查找要清理的文件gitrev-list--objects--all|grep"清理的文件关键字"2.删除历史记录gitlog--pretty=oneline--branches--文件或者目录3.重写所有commit,将该文......
  • docker-安装Oracle11g
    获取镜像 在线 dockerpulloracleinanutshell/oracle-xe-11g离线tar包下载:链接: https://pan.baidu.com/s/1bRp6mSqYtMwIel1172NinA 提取码:62in  ......
  • docker镜像体积优化,拉取最小化jre镜像并构建nodejs环境
    镜像体积优化优化前构建镜像体积:1.2GB优化后构建镜像体积:621.63MB 优化思路,1.centos镜像体积太大,有几百MB,使用alpine版本体积更小。2.只需要jre即可,无需jdk。优化前......
  • 五个实用的docker小工具
    在使用docker的过程中,除了dockerpull、dockerpush等常见命令外,还有一些实用的小工具帮助更好地使用docker,如:rekcodrunlikeget_command_4_run_containerwhalerdiver......
  • Docker Desktop 报错 WSL 2 Kernel update
    解决报错如下1、先升级WSL2下载地址可以用docker提示的地址,这里提供一个阿里云盘的地址「wsl_update_x64.msi」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP,无需......
  • 万字长文带你入门Docker
    1Dockerdockerfiler镜像构建Compose是在单机进行容器编排Horbor镜像仓库Dockerswarm在多机进行容器编排DockerCompose缺点是不能在分布式多机器上使用Dockerswa......
  • 【Docker基础入门】部署docker管理工具portainer-ce
    (【Docker基础入门】部署docker管理工具portainer-ce)一、portainer-ce介绍1.portainer简介Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,......
  • docker-compose部署elk并设置账户密码
    docker-compose部署elk并设置账户密码系列最近因为在搭建微服务环境所以要用到elk首先介绍一下什么是elk,以及负责的功能模块(部署的过程比较坎坷我尽量把遇到的坑,以及如何......
  • wsl 中 docker-compose 搭建 kafka 集群出现的外部访问错误
    在wsl中用docker-compose搭建了一台zookeeper+三台broker的kafka集群,使用的镜像是bitnami/kafka,在按照镜像文档运行容器后,发现运行在宿主机里的客户端程序无法......
  • 使用 Docker 打包 Java 应用程序为镜像
    创建Dockerfile在Docker中,Dockerfile是一个文本文件,包含一系列的指令,用于定义如何构建Docker镜像。可以通过编写Dockerfile来自定义Docker镜像。对于Java应用......