当前位置: 首页 > news >正文

基于nerdctl+BuildKit+containerd构建容器镜像

基于nerdctl+BuildKit+containerd构建容器镜像

0 容器基础知识

容器技术除docker之外,还有coreOS的rkt、google的gvisor、以及docker开源的containerd、redhat的podman、阿里的pouch等,为了保证容器生态的标准性和健康可持续发展,包括Docker、华为、微软、红帽、谷歌、AWS、IBM等公司在2015年6月共同成立了一个叫open container(OCI,https://opencontainers.org/ )的组织,其目的就是制定开放的标准的容器规范,目前OCI一共发布了三个规范,分别是运行时规范(runtime-spec)、镜像规范(image-spec)和分发规范(distribution-spec),有了以上的规范,就可以保证不同容器的可移植性和相互兼容性。
https://containerd.io/
https://gvisor.dev/
https://podman.io/
https://github.com/rkt/rkt #已停止维护
https://github.com/alibaba/pouch #阿里开源
#安装文档,目前版本不支持Ubuntu 2204
https://github.com/AliyunContainerService/pouch/blob/master/INSTALLATION.md

0.1 镜像构建方式

0.1.1 使用主机构建

Docker #通用的容器镜像构建工具
nerdctl+BuildKit+containerd #https://github.com/moby/buildkit ,下一代镜像构建工具

图一:业务流程

buildProcedure

图二:构建环境区别

imgBuildDiffrents

0.1.2.kubernetes环境使用Kaniko动态Pod构建:

参考:
https://github.com/GoogleContainerTools/kaniko #官方git仓库, 已不再更新
https://github.com/kaniko-build/builder #三方Git维护
https://gallery.ecr.aws/pergola/kaniko-project/executor #AWS镜像仓库

1 部署BuildKit

  • 2017年由 docker 的创始人 ( tonistiigi 托尼斯蒂吉) 提议,将docker build 的能力独立成一个项目,针对构建的底层技术进行协作,更好复用和定制构建技术,该将项目即buildkit。
  • BuildKit是 Docker 官方社区推出的下一代镜像构建工具,官方宣称通过 BuildKit 可以更加快速、有效、安全地构建容器镜像。

1.1 BuildKit组成部分

https://github.com/moby/buildkit

buildkitd(服务端),目前支持runc和containerd作为镜像构建环境,默认是runc,可以更换为containerd。
buildctl(客户端),负责解析Dockerfile文件,并向服务端buildkitd发出构建请求。

1.2 安装buildkitd

root@k8s-master1:/usr/local/src# pwd
/usr/local/src
root@k8s-master1:/usr/local/src# wget 
https://github.com/moby/buildkit/releases/download/v0.26.3/buildkit-v0.26.3.linux
amd64.tar.gz
root@k8s-master1:/usr/local/src# tar xvf  buildkit-v0.26.3.linux-amd64.tar.gz 
root@k8s-master1:/usr/local/src# mv bin/* /usr/local/bin/
root@k8s-master1:/usr/local/src# buildctl  --help

1.3 使用systemd service运行

#buildkit.socket
root@k8s-master1:/usr/local/src# vim /lib/systemd/system/buildkit.socket
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660
[Install]
WantedBy=sockets.target#buildkitd.service 
root@k8s-master1:/usr/local/src# vim  /lib/systemd/system/buildkit.service 
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socketDocumentation=https://github.com/moby/buildkit
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
[Install]
WantedBy=multi-user.target
root@k8s-master1:/usr/local/src# systemctl daemon-reload && systemctl enable buildkit && 
systemctl restart  buildkit && systemctl status  buildkit

2测试镜像构建

2.1 nerdctl常用命令

~# nerdctl  login harbor.yourdomainname
~# nerdctl pull
~# nerdctl tag 
~# nerdctl  push
#信任自签发的证书
~# nerdctl --insecure-registry  push 

2.2 镜像构建

# cat Dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/myhubregistry/ubuntu:24.04.3RUN apt update && apt install -y ca-certificates curl gnupg# cat build-command.sh 
#!/bin/bashnerdctl build -t harbor.yourdomainname/baseimages/ubuntu:24.04.3-base .nerdctl push harbor.yourdomainname/baseimages/ubuntu:24.04.3-base

执行构建脚本后可以使用浏览器访问harbor进行验证

3 基于自定义镜像创建容器

3.1 nerdctl命令创建测试容器

#nerdctl run --rm -it -p 80:80 harbor.yourdomianname/myserver/nginx-base:ubuntu2204-nginx-1.28.1

3.2 docker命令创建测试容器

#docker run --rm -it -p 80:80 harbor.yourdomianname/myserver/nginx-base:ubuntu2204-nginx-1.28.1
http://www.jsqmd.com/news/318734/

相关文章:

  • vulnstack红队实战二
  • 英伟达推出合成数据集支持新加坡AI发展
  • AI元人文构想:证成
  • 谷歌联合打击全球最大住宅代理网络IPIDEA
  • OS55.【Linux】System V消息队列的简单了解
  • 2026国内外主流大模型全景对比:技术演进与场景适配深度解析
  • 38-mini-vue 实现解析 element
  • Java零基础必看,1小时搞定微服务,从0到1搭建springcloud+nacos实战项目,搞定企业刚需技术!
  • 第6章:字符设备驱动的高级操作1:ioctl 系统调用
  • SQL 注入攻防进阶
  • 让 Q 值估计更准确:从 DQN 到 Double DQN 的改进方案
  • 《贾子智慧理论体系:从认知到文明的统一框架》| Kucius Wisdom Framework: A Unified Framework from Cognition to Civilization
  • 使用Dockerfile构建Flask应用镜像
  • vulnstack红队实战一
  • 全球首次突破异形框定位难题,百度开源全新OCR模型 PaddleOCR-VL-1.5
  • 智能指针详解
  • PVE 9.0 定制 Debian 13 镜像 支持 Cloud-Init 敏捷部署虚拟机【模板篇】
  • Java面试中的异常继承难题:自定义Exception避坑指南
  • Spring Boot的项目创建
  • 小程序毕设项目推荐-基于SpringBoot的医院设备管理及报修系统微信小程序基于springboot的医院设备管理及报修小程序的设计与实现【附源码+文档,调试定制服务】
  • 小程序毕设选题推荐:基于springboot的医院设备管理及报修小程序的设计与实现基于微信小程序的医院设备管理及报修系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 基于SpringBoot的房屋租售系统毕业论文+PPT(附源代码+演示视频)
  • 销售实战资源合集
  • 使用 NanUI 快速创建具有现代用户界面的 WinForm 应用程序
  • AI运维专家圆桌:新兴技术类别的诞生
  • ServiceNow与Anthropic达成多年合作协议
  • 一款基于 .NET Avalonia 开源免费、快速、跨平台的图片查看器
  • 【课程设计/毕业设计】基于微信小程序的医院设备管理及报修系统基于springboot的医院设备管理及报修小程序的设计与实现【附源码、数据库、万字文档】
  • AI工具存在严重安全脆弱性,治理刻不容缓
  • 小程序计算机毕设之基于SpringBoot+微信小程序的微信医院医疗设备管理系统管理系统基于springboot的医院设备管理及报修小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)