前言
在 Kubernetes(K8s)环境中,containerd 是更轻量、更符合标准的容器运行时(CRI),而 Docker 已被废弃(从 K8s v1.24 起不再默认支持),
以下是 纯 containerd 方式 构建并运行 Nginx 镜像的完整流程
1.二进制安装nerdctl
https://github.com/containerd/nerdctl

github
## 解压
[root@uos ~]# tar Cxzvvf /usr/local nerdctl-full-2.1.3-linux-amd64.tar.gz
## 配置service
[root@uos lib]# cd systemd/system/
[root@uos system]# ll
总用量 12
-rw-r--r-- 1 root root 1309 7月 8 13:53 buildkit.service
-rw-r--r-- 1 root root 1248 7月 8 13:51 containerd.service
-rw-r--r-- 1 root root 312 7月 8 13:53 stargz-snapshotter.service
[root@uos system]# pwd
/usr/local/lib/systemd/system
[root@uos system]# cp buildkit.service /usr/lib/systemd/system/
## 配置buildkitd.toml
[root@uos ~]# cat /etc/buildkit/buildkitd.toml
[worker.containerd]
enabled = true
namespace = "k8s.io" # 与 Kubernetes 一致
[registry]
# Docker Hub 镜像加速(替换为你的镜像源)
[registry."docker.io"]
mirrors = ["https://docker.m.daocloud.io","https://hub.rat.dev"]
## 配置nerdctl.toml
[root@uos ~]# cat /etc/nerdctl/nerdctl.toml
namespace = "k8s.io" # 强制所有命令默认使用 k8s.io
2. 编写Dockerfile(与 Docker 兼容)
[root@uos ~]# cat Dockerfile
# 使用官方 Nginx 镜像(基于 Alpine 更轻量)
FROM nginx:alpine
# 删除默认的 Nginx 欢迎页
RUN rm -rf /usr/share/nginx/html/*
# 复制静态文件到容器
COPY index.html /usr/share/nginx/html/
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx(前台运行)
CMD ["nginx", "-g", "daemon off;"]
3. 制作镜像
# 构建镜像
nerdctl build -t my-nginx:latest .
# 查看镜像
nerdctl images