qianyuqiye1头像
抛弃 Docker:nerdctl 容器工具从入门到实战封面图

抛弃 Docker:nerdctl 容器工具从入门到实战

抛弃 Docker:nerdctl 容器工具从入门到实战

命令和 Docker 99% 一样,生产环境首选的 containerd 管理工具。

为什么要用 nerdctl?

Docker 是大家最熟悉的容器工具,但在 K8s 生产环境里,容器运行时早就换成了 containerd。containerd 本身没有命令行工具,你得用 crictl 来操作,但 crictl 的命令参数和 Docker 完全不一样,学习成本很高。

nerdctl 就是来解决这个问题的:它是 containerd 官方出的命令行工具,语法和 Docker 几乎一模一样,你会 docker run 就会 nerdctl run,零学习成本迁移。

安装 nerdctl

# 下载安装
wget http://192.168.46.100/01.softwares/03.stage-3/nerdctl-1.7.7-linux-amd64.tar.gz
tar -xf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/bin/

# 安装 CNI 网络插件
mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.6.0.tgz -C /opt/cni/bin

# 配置内核参数
cat > /etc/sysctl.d/k8s.conf << 'EOF'
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

验证安装:

nerdctl version

配置镜像加速

国内拉 Docker Hub 的镜像太慢,需要配置加速。nerdctl 用的是 certs.d 目录方式配置。

# 配置 docker.io 加速
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://registry-1.docker.io"

[host."https://docker.m.daocloud.io"]
  capabilities = ["pull", "resolve"]
EOF

# 配置私有仓库(HTTP 方式)
mkdir -p /etc/containerd/certs.d/hub.laoma.cloud
cat > /etc/containerd/certs.d/hub.laoma.cloud/hosts.toml << EOF
server = "http://hub.laoma.cloud"
[host."http://hub.laoma.cloud"]
  capabilities = ["pull", "resolve"]
EOF

# 重启 containerd
systemctl restart containerd

镜像管理

命令和 Docker 完全一样:

# 查看镜像列表
nerdctl images

# 拉取镜像
nerdctl pull busybox

# 给镜像打标签
nerdctl tag busybox myrepo/busybox:v1

# 推送镜像
nerdctl login myrepo.com
nerdctl push myrepo/busybox:v1

# 导出镜像为 tar 文件
nerdctl save busybox -o busybox.tar

# 从 tar 文件导入镜像
nerdctl load -i busybox.tar

# 删除镜像
nerdctl rmi busybox

# 清理所有未使用的镜像
nerdctl image prune --all --force

容器管理

# 后台运行容器
nerdctl run -d --name nginx -p 8080:80 nginx

# 查看运行中的容器
nerdctl ps

# 查看所有容器(包括已停止的)
nerdctl ps -a

# 进入容器内部
nerdctl exec -it nginx bash

# 查看容器日志
nerdctl logs nginx

# 停止容器
nerdctl stop nginx

# 启动容器
nerdctl start nginx

# 重启容器
nerdctl restart nginx

# 删除容器
nerdctl rm nginx

# 查看端口映射
nerdctl port nginx

# 查看容器详细信息
nerdctl inspect nginx

网络原理

nerdctl 创建容器时,会自动创建一个叫 nerdctl0 的 Linux 网桥,容器的网关就是这个网桥。

# 查看主机上的网桥
ip addr show nerdctl0

# 查看网桥连接了哪些容器
brctl show

容器内的网卡是 eth0,通过 veth pair 和主机的网桥连接。容器之间通过网桥互通,访问外部网络通过 NAT。

存储挂载

和 Docker 一样,用 -v 参数挂载目录:

# 挂载主机目录(bind mount)
nerdctl run -d -v /data:/data busybox sleep infinity

# 使用命名卷(volume)
nerdctl run -d -v data:/data busybox sleep infinity

# 查看所有卷
nerdctl volume ls

和 crictl 的区别

对比项nerdctlcrictl
命令风格和 Docker 完全兼容K8s 专用,参数不同
适用场景日常开发、测试K8s 排障
安装方式需要手动安装K8s 节点默认自带
命名空间默认 default默认 k8s.io

一句话总结:日常用 nerdctl,K8s 排障用 crictl。

总结

nerdctl 是从 Docker 迁移到 containerd 生态的最佳桥梁。不用背新命令,不用改习惯,直接就能用。生产环境 K8s 节点上,配合 crictl 一起用,开发排障两不误。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2301_80935320/article/details/168772262

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--