containerd + nerdctl + buildkit 实现docker cli 和 docker-compose 功能
自从 Containerd 发布 1.5 以后,Kubernetes 的CRI接口使用 Containerd 来替代 dockershim 时, 我们便可以使用 nerdctl 工具(替代 docker cli) 配合 Containerd 的情况下基本已经可以替换掉 Docker 和 Docker Compose 。只有 nerdctl 还不能打包镜像,还需要 BuildKit 服务配置完成打包镜像
containerd
安装 containerd 服务,请参考 containerd安装 文章
nerdctl
nerdctl 是 与 Docker 兼容的CLI for Containerd,其支持Compose、Rootless、eStargz、OCIcrypt和IPFS,与docker命令行语法类似,所以其上手使用非常简单。项目地址 (https://github.com/containerd/nerdctl) 开源
注意:
nerdctl
默认操作的是default
命名空间
下载nerdctl包
sudo curl -SLo /usr/local/src/nerdctl-1.7.4-linux-amd64.tar.gz https://github.com/containerd/nerdctl/releases/download/v1.7.4/nerdctl-1.7.4-linux-amd64.tar.gz
复制二进制文件
sudo mkdir -p /opt/nerdctl
sudo tar xf /usr/local/src/nerdctl-1.7.4-linux-amd64.tar.gz -C /opt/nerdctl
sudo cp /opt/nerdctl/nerdctl /usr/local/bin
sudo rm -rf /opt/nerdctl
buildkit
BuildKit 是下一代的镜像构建组件,在 https://github.com/moby/buildkit 开源。
BuildKit 特性如下:
- 自动垃圾收集
- 可扩展的前端格式
- 并发依赖项解析
- 高效的指令缓存
- 构建缓存导入/导出
- 嵌套的构建作业调用
- 可配置的构建底层,包括 OCI (runc)和 containerd,未来将加入更多的构建底层
- 多种输出格式
- 可插拔架构
- 无需 root 权限
下载buildkit包
curl -SLo /usr/local/src/buildkit-v0.10.5.linux-amd64.tar.gz https://github.com/moby/buildkit/releases/download/v0.10.5/buildkit-v0.10.5.linux-amd64.tar.gz
复制二进制文件
sudo mkdir -p /opt/buildkit
sudo tar xf /usr/local/src/buildkit-v0.10.5.linux-amd64.tar.gz -C /opt/buildkit
sudo cp /opt/buildkit/bin/{buildkitd,buildctl} /usr/local/bin
sudo rm -rf /opt/buildkit
创建system服务
# buildkitd 的 system 的文件
cat <<-EOF | sudo tee /lib/systemd/system/buildkitd.service >> /dev/null
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
# Requires=buildkit.socket
After=buildkit.socket
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
[Install]
WantedBy=multi-user.target
EOF
# buildkitd 服务依赖的 socket 文件
cat <<-EOF | sudo tee /lib/systemd/system/buildkit.socket >> /dev/null
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
[Install]
WantedBy=sockets.target
EOF
启动服务
sudo systemctl daemon-reload
sudo systemctl start buildkitd.service
sudo systemctl enable buildkitd.service
设置别名
alias docker=nerdctl
alias docker-compose="nerdctl compose"
持久化请将配置写入
~/.bashrc
文件中。
测试功能
docker build
docker build --build-arg VERSION=2.2.7 -t keepalived:2.2.7 .
docker images keepalived:2.2.7
docker-compose
docker-compose up -d
docker-compose ps
报错信息提示以下:
FATA[0000] needs CNI plugin "bridge" to be installed in CNI_PATH ("/opt/cni/bin"), see https://github.com/containernetworking/plugins/releases: exec: "/opt/cni/bin/bridge": stat /opt/cni/bin/bridge: no such file or directory
解决方案:
curl -SL -o /usr/local/src/cni-plugins-linux-amd64-v1.1.1.tgz https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
mkdir -p /opt/cni/bin
tar xf /usr/local/src/cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律