[开源]制作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|current project Path:C:\Users\Administrator\source\repos\testimagepush\testimagepush\testimagepush.csproj
16:26:52|INFO|dotnet publish "C:\Users\Administrator\source\repos\testimagepush\testimagepush\testimagepush.csproj" -c Release -o "C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish\"
16:26:53|INFO|版权所有(C)MicrosoftCorporation。保留所有权利。
16:26:53|INFO|正在确定要还原的项目…
16:26:53|INFO|正在确定要还原的项目…
16:26:53|INFO|所有项目均是最新的,无法还原。
16:26:53|INFO|所有项目均是最新的,无法还原。
16:26:55|INFO|testimagepush->C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\net5.0\testimagepush.dll
16:26:55|INFO|testimagepush->C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\net5.0\testimagepush.Views.dll
16:26:55|INFO|testimagepush->C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\net5.0\testimagepush.Views.dll
16:26:55|INFO|testimagepush->C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish\
16:26:55|INFO|testimagepush->C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish\
16:26:55|INFO|publishtarget==>file://C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish#link16
16:26:55|INFO|-----------------Startpublishdockerimage-----------------
16:26:55|INFO|-----------------DeployStart-----------------
16:26:55|INFO|jib.exepush--configfile="C:\Users\Administrator\AppData\Roaming\020198643be8650696268b110a25104d_param.json"
16:26:56|INFO|Start:Pullingmanifestofbaseimagemcr.microsoft.com/dotnet/aspnet:5.0
16:26:56|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/useproxy:127.0.0.1:1080
16:26:56|INFO|Start:[childprogress]settinguptopushlayers
16:26:57|INFO|callhttp:https://mcr.microsoft.com/v2/dotnet/aspnet/blobs/sha256:ab15cbada1ec431e6222fbf5544eee38f1ac0bc0ada4b37831a25ac991a6e522useproxy:127.0.0.1:1080
16:27:00|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/sha256:9127a318a8536208e7041347951bfd4f95257db52ee748e1d586cda0f029380b
16:27:00|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/uploads/
16:27:00|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/uploads/fd39d922-c22a-4871-b439-13a6d7c67eff?_state=3gR0LUGRZV1wpHAxrlWtg9CZt8rBXnShN4B-EYxD0g57Ik5hbWUiOiJ5dXpkL3Rlc3RpbWFnZXB1c2giLCJVVUlEIjoiZmQzOWQ5MjItYzIyYS00ODcxLWI0MzktMTNhNmQ3YzY3ZWZmIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA0LTExVDA4OjI3OjAzLjA1MTA3NTgzMloifQ%3D%3D
16:27:00|INFO|Start:pushingblobsha256:9127a318a8536208e7041347951bfd4f95257db52ee748e1d586cda0f029380b[1052129]
16:27:00|INFO|Start:pullcontainerconfigurationsha256:ab15cbada1ec431e6222fbf5544eee38f1ac0bc0ada4b37831a25ac991a6e522
16:27:00|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/sha256:ff2f4c814a04afba84f03a2fd077348a964bd525c4e253e3fedb23d035f9c45a
16:27:00|INFO|End:pushingblobsha256:f7ec5a41d630a33a2d1db59b95d89d93de7ae5a619a3a8571b78457e48266eba[27139373]
16:27:00|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/uploads/fd39d922-c22a-4871-b439-13a6d7c67eff?_state=LSGtNCpNE7aaQCoZDLvXL6DJRn1PN85OFbLaPPFouRZ7Ik5hbWUiOiJ5dXpkL3Rlc3RpbWFnZXB1c2giLCJVVUlEIjoiZmQzOWQ5MjItYzIyYS00ODcxLWI0MzktMTNhNmQ3YzY3ZWZmIiwiT2Zmc2V0IjoxMDUyMTI5LCJTdGFydGVkQXQiOiIyMDIxLTA0LTExVDA4OjI3OjAzWiJ9&digest=sha256:9127a318a8536208e7041347951bfd4f95257db52ee748e1d586cda0f029380b
16:27:01|INFO|End:pushingblobsha256:ff2f4c814a04afba84f03a2fd077348a964bd525c4e253e3fedb23d035f9c45a[2719]
16:27:01|INFO|callhttp:https://registry.cn-hangzhou.aliyuncs.com/v2/yuzd/testimagepush/blobs/uploads/dc2051f5-7d7b-4622-9979-3f028fc124df?_state=ZSRwEW96U7Pu7blVT_rsRjY_UsBe02Mbjer7jCkkPz17Ik5hbWUiOiJ5dXpkL3Rlc3RpbWFnZXB1c2giLCJVVUlEIjoiZGMyMDUxZjUtN2Q3Yi00NjIyLTk5NzktM2YwMjhmYzEyNGRmIiwiT2Zmc2V0IjoyNzE5LCJTdGFydGVkQXQiOiIyMDIxLTA0LTExVDA4OjI3OjAzWiJ9&digest=sha256:ff2f4c814a04afba84f03a2fd077348a964bd525c4e253e3fedb23d035f9c45a
16:27:01|INFO|End:settinguptopushlayers
16:27:01|INFO|End:taggingwith1.0.3
16:27:03|INFO|globalpullimagecachefolder==>file://%LOCALAPPDATA%/fibdotnet#link36
16:27:03|INFO|localbuildimagecachefolder==>file://C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\dockerImage_cache#link37
16:27:03|INFO|publishtarget==>file://C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish#link38
16:27:03|INFO|-----------------DeployEnd-----------------
16:27:03|INFO|【Deploylog】==>file://C:\Users\Administrator\source\repos\testimagepush\testimagepush\bin\Release\dockerImage\publish_deploy_logs\20210411162703.log#link40
发布成功后检查阿里云镜像仓库是否成功推送
镜像已有,下面在服务器上使用该镜像
先在服务器上拉取镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/yuzd/testimagepush:1.0.3
然后基于该镜像跑一个容器
docker run -p 5000:80 --name testimagepush -d ff2
其他注意事项
插件下载地址:
https://marketplace.visualstudio.com/items?itemName=nainaigu.AntDeployVsix
项目开源地址:
https://github.com/yuzd
dockerhub镜像仓库作为基础镜像构建并上传到dockerhub镜像仓库
考虑到网络环境你需要配置拉取和推送的代理
如果你基础镜像用的是阿里云或者是腾讯云的话,是需要配置账户名和密码的。
固定密码是在开通容器镜像服务时候可以配置的
基础镜像会在本地缓存吗?
会的。在日志里面的最后几行有记录
global pull image cache folder 代表的是拉取镜像缓存,如果你删除的话会重新拉
local build image cache folder 代表的是制作本地制作镜像的分层缓存
还有其他问题可以提issue或加群反馈
我是正东,学的越多不知道也越多。这个公众号是我的实验小天地,我会分享一些我开源的工具(欢迎你来提意见),好玩好用的新技术。如果你也和我一样喜欢折腾技术请关注 !
[开源]制作docker镜像不依赖linux和Docker环境的更多相关文章
- 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- idea使用docker-maven-plugin插件将项目编译为docker镜像到远程linux服务器 原
在使用idea开发时,直接docker-maven-plugin插件,把项目编译成docker镜像,然后通过docker:push推送到linux服务器,非常简单,快捷,也避免了手动打包,然后拷贝wa ...
- 构建自定义docker镜像,上传至docker hub
docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使 ...
- Docker 安装入门 Centos Linux安装Docker 部署mysql
这次购买了阿里云云服务器,并且安装了Centos 7.5 学习使用Docker, 确认版本信息 Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Dock ...
- 创建docker镜像,初始化jdk8与tomcat环境
一.创建Dockerfile文件: 创建Dockerfile文件,下载jdk与tomcat放在Dockerfile同目录下. Dockerfile文件内容: FROM Ubuntu:14.10 MAI ...
- 如何将docker镜像文件上传至Docker Hub
一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...
- docker 镜像中包含数据库环境和运行环境
需求: 一个镜像中要包含数据库环境和运行环境 Apache 环境 + mariadb 已经在拉取了Apache的运行环境 - 拉取代码 git https://github.com/timhaak/d ...
- SpringBoot系列: 制作Docker镜像的全过程
本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外, 在本文中, 演示了Windows+Maven+Docker To ...
- 制作可以 SSH 登录的 Docker 镜像
Docker使用系列一我们把镜像源改为了阿里云的,方便后续的操作. 执行这个命令就把源地址改为阿里的: curl https://git.oschina.net/feedao/Docker_shell ...
随机推荐
- RocketMq灰皮书(二)------本地部署启动MQ
RocketMq灰皮书(二)------本地部署启动MQ Windows10本地部署RocketMQ 在上一篇文章中,我们对rocket的几个基本概念进行了介绍,也了解了业内几大消息中间件的区别.在本 ...
- Codeforces Round #703 (Div. 2) (A~E)
A. Shifting Stacks 题目链接 点我跳转 题目大意 给定 \(N\) 个土堆,第 \(i\) 个土堆有 \(Ai\) 个木块 你可以将第 \(i\) 个土堆的木块转移至第 \(i + ...
- 微信小程序(一)-工具创建和结构配置说明 Stable Build
按装前特别说明: windows最好下载32位的,不然用到用到后面就出现"网络连接失败",然后就登录不上去了,打不开编辑器了! 问题 : 微信开发者工具网络连接失败, " ...
- 看完了进程同步与互斥机制,我终于彻底理解了 PV 操作
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...
- Docker搭建Hadoop环境
文章目录 Docker搭建Hadoop环境 Docker的安装与使用 拉取镜像 克隆配置脚本 创建网桥 执行脚本 Docker命令补充 更换镜像源 安装vim 启动Hadoop 测试Word Coun ...
- 使paramiko库执行命令时,在给定的时间强制退出
原因: 使用paramiko库ssh连接到远端云主机上时,非常偶现卡死现象,连接无法退出(可以是执行命令时云主机重启等造成).需要给定一段时间,不管命令执行是否卡住,都退出连接,显示命令执行超时错误. ...
- git仓库创建及基本使用
创建git用户 useradd git passwd git 创建目录 mkdir /home/git/repos/app.git/ -p 初始化目录 cd /home/git/repos/app.g ...
- bouncycastle中添加HMAC-SM3支持
一. 最近看完了PKCS#5中的内容,总结一下自己添加HMAC-SM3中遇到的问题和解决方法. 大概通读BC java源码以后,开始上手修改. 在SM3.java中添加如下代码: /** * SM3 ...
- SQL Database for Modern Developers
好书分享,面向开发者的Azure SQL Database最佳实践,也适用SQL Server 2016以上的版本.应对不同场景使用的数据库功能,包括内存表,列存储表,非聚集列存储索引,JSON等等. ...
- Vmware虚拟机CentOS7、Ubuntu20系统设置静态IP,且主机和虚拟机系统能相互ping通。
目录 前言 一.VMware虚拟系统centos7设置静态IP 1.1 打开VMware虚拟网络配置窗口 1.2 方法1:通过DHCP服务给主机动态分配IP,同时设置centos静态IP 1.2.1 ...