Ubuntu 24.04 从入门到实战:系统安装、网络配置与容器运行时 Containerd 完全指南

Ubuntu 24.04 从入门到实战:系统安装、网络配置与容器运行时 Containerd 完全指南

一份详尽的 Ubuntu 24.04 系统管理 + Containerd 容器运行时部署笔记,涵盖安装、网络、软件包管理,以及 ctr / nerdctl / crictl 的实战对比。


写在前面

最近在学习容器和 Kubernetes 的过程中,重新梳理了 Ubuntu 24.04 的基础运维和容器运行时(Containerd)的部署流程。网上的资料大多零散,要么只讲系统安装,要么直接跳到容器编排,缺少一个从裸机到容器运行时的完整串联。

因此我把自己的课堂笔记整理成这篇文章,希望能帮你 一条龙 掌握:

  • Ubuntu 24.04 的安装后网络配置、软件包管理
  • Containerd 的部署与镜像加速
  • 三大客户端工具(ctr、nerdctl、crictl)的区别与实战

无论你是运维新手,还是准备转向 Containerd 的 K8s 开发者,这篇文章都值得收藏。


一、Ubuntu 24.04 安装要点

1.1 虚拟机安装(简要)

本文实验环境为 VMware Workstation 17 + Ubuntu 24.04 LTS。安装过程不再赘述,只强调一个关键技巧

安装时断开网卡,防止系统自动联网下载更新包,导致安装时间过长。等系统装好后再手动配置网络。

安装过程中,记得将镜像源改为国内源(阿里云或华为云),能大幅提升后续软件包下载速度。

  • 阿里云:http://mirrors.aliyun.com/ubuntu
  • 华为云:http://mirrors.huaweicloud.com/ubuntu

安装完成后重启,若出现 [FAILED] Failed unmounting /dev/cdrom,直接回车忽略即可。

1.2 安装后必做配置

① 安装基础软件包
bash 复制代码
sudo apt update
sudo apt install -y vim bash-completion
② 配置静态 IP(使用 netplan)

Ubuntu 24.04 默认使用 netplan 管理网络,配置文件在 /etc/netplan/ 下。

示例:配置静态 IP 10.1.8.10/24,网关 10.1.8.2,DNS 223.5.5.5

yaml 复制代码
# /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens32:
      dhcp4: no
      addresses:
        - 10.1.8.10/24
      routes:
        - to: default
          via: 10.1.8.2
      nameservers:
        addresses:
          - 223.5.5.5
  version: 2

应用配置:

bash 复制代码
sudo chmod 600 /etc/netplan/00-installer-config.yaml
sudo netplan apply
③ 开启 root 远程登录(可选)
bash 复制代码
sudo passwd root                # 设置 root 密码
sudo vim /etc/ssh/sshd_config   # 修改 PermitRootLogin yes
sudo systemctl reload ssh
④ 美化命令行提示符

~/.bashrc 末尾添加带时间的彩色提示符:

bash 复制代码
PS1='[\[\e[91m\]\u\[\e[93m\]@\[\e[92;1m\]\h\[\e[0m\] \[\e[94m\]\W\[\e[0m\] \[\e[35m\]\t\[\e[0m\]]\[\e[93m\]\$\[\e[0m\] '
HISTTIMEFORMAT="%F %T "
⑤ 时间同步
bash 复制代码
apt install -y chrony
timedatectl set-timezone Asia/Shanghai
systemctl enable chrony --now

二、网络管理深入:netplan 与 DNS 解析

2.1 netplan 是什么?

Netplan 是 Canonical 开发的网络配置工具,它使用 YAML 描述网络,然后生成底层配置给 NetworkManagersystemd-networkd

常用命令:

bash 复制代码
netplan apply   # 应用配置
netplan get     # 查看当前生效配置

2.2 系统域名解析顺序

Ubuntu 的域名解析由 /etc/nsswitch.conf 控制:

复制代码
hosts: files dns
  • files :优先读取 /etc/hosts(本地静态映射)
  • dns :走 systemd-resolved 服务进行 DNS 查询

systemd-resolved 的查询优先级为:

本地缓存 → 链路级 DNS(网卡配置)→ 全局 DNS(/etc/systemd/resolved.conf)→ Fallback DNS(内置公共 DNS)

查看当前 DNS 状态:

bash 复制代码
resolvectl status
resolvectl query baidu.com

三、软件包管理:dpkg 与 apt 全解

3.1 dpkg 系列工具

命令 作用
dpkg -i 安装 .deb 包(不处理依赖)
dpkg -r 卸载包
dpkg-query -l 列出已安装包
dpkg-query -L <pkg> 查看包安装的文件清单
dpkg-deb -c <deb> 查看 deb 包内含文件
dpkg-deb -I <deb> 查看 deb 包的控制信息(control、脚本等)

注意dpkg 无法自动解决依赖,推荐使用 apt

3.2 apt 命令(现代推荐)

apt 整合了 apt-getapt-cache 的常用功能,更简洁。

apt 命令 等价旧命令 说明
apt update apt-get update 刷新软件源列表
apt install apt-get install 安装包
apt remove apt-get remove 卸载包(保留配置)
apt purge apt-get purge 卸载并清除配置
apt autoremove apt-get autoremove 删除无用的依赖包
apt upgrade apt-get upgrade 升级所有包
apt full-upgrade apt-get dist-upgrade 升级并智能处理依赖
apt search apt-cache search 搜索包
apt show apt-cache show 查看包详情
apt list (新) 列出包(支持 --installed 等)
apt edit-sources (新) 编辑 /etc/apt/sources.list

软件源配置/etc/apt/sources.list/etc/apt/sources.list.d/*.list,格式为:

复制代码
deb 镜像地址 版本代号 组件(main/restricted/universe/multiverse)

例如 Ubuntu 24.04(代号 noble)的阿里源:

复制代码
deb http://mirrors.aliyun.com/ubuntu noble main restricted universe multiverse

四、Containerd 概述与部署

4.1 为什么学习 Containerd?

Kubernetes 从 v1.24 开始移除了内置的 dockershim,不再直接支持 Docker Engine。官方推荐使用 containerd 或 CRI-O 作为容器运行时。

containerd 是 CNCF 毕业的工业级容器运行时,负责:

  • 镜像管理(pull/push)
  • 容器生命周期(创建/启动/停止)
  • 存储挂载与网络配置
  • 对接 OCI 运行时(runc)

4.2 安装 Containerd(Ubuntu 24.04)

Ubuntu 官方仓库提供 containerd 包(版本 1.7.x),也可使用 Docker CE 仓库的 containerd.io(版本更新,如 2.x)。

本文采用 Ubuntu 官方 1.7.12 版本:

bash 复制代码
apt install -y containerd=1.7.12-0ubuntu4

生成默认配置文件:

bash 复制代码
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

4.3 镜像加速配置(重点)

containerd 的镜像加速配置因版本而异,1.7.x 推荐使用 config_path + certs.d 方式。

步骤

  1. 修改 /etc/containerd/config.toml,设置 config_path
toml 复制代码
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
  1. docker.ioregistry.k8s.io 配置加速镜像:
bash 复制代码
# 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"]
[host."https://09def58152000fc00ff0c00057bad7e0.mirror.swr.myhuaweicloud.com"]
  capabilities = ["pull", "resolve"]
EOF

# registry.k8s.io
mkdir -p /etc/containerd/certs.d/registry.k8s.io
cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml <<EOF
server = "https://registry.k8s.io"
[host."https://k8s.m.daocloud.io"]
  capabilities = ["pull", "resolve"]
[host."https://09def58152000fc00ff0c00057bad7e0.mirror.swr.myhuaweicloud.com"]
  capabilities = ["pull", "resolve"]
EOF
  1. 重启 containerd:
bash 复制代码
systemctl restart containerd

五、Containerd 客户端三剑客

containerd 本身通过 gRPC API 提供服务,我们有三个常用客户端工具:

工具 用途 特点
ctr containerd 原生调试客户端 底层、难用、不支持镜像加速(需手动指定 --hosts-dir)
nerdctl 兼容 Docker 风格的客户端 推荐日常使用,命令与 docker 几乎一致
crictl Kubernetes CRI 接口客户端 专用于 K8s 节点调试,符合 CRI 规范

5.1 ctr(不推荐日常使用)

bash 复制代码
# 拉取镜像(必须指定 --hosts-dir 才能使用加速)
ctr image pull --hosts-dir /etc/containerd/certs.d docker.io/library/busybox:latest

# 查看镜像
ctr image ls

# 运行容器
ctr run --rm -t docker.io/library/busybox:latest mybox sh

缺点:命令不友好,不支持自动补全,生产环境几乎不用。

5.2 nerdctl(强烈推荐)

安装 nerdctl(v1.7.7):

bash 复制代码
wget http://192.168.42.200/course-materials/softwares/stage03/nerdctl-1.7.7-linux-amd64.tar.gz
tar -xf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/bin/

安装 CNI 插件(用于网络):

bash 复制代码
wget http://192.168.42.200/course-materials/softwares/stage03/cni-plugins-linux-amd64-v1.6.0.tgz
mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.6.0.tgz -C /opt/cni/bin

加载内核模块并设置 sysctl(用于网络转发):

bash 复制代码
modprobe overlay br_netfilter
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 常用命令(与 docker 几乎一致)

bash 复制代码
# 镜像
nerdctl images
nerdctl pull busybox
nerdctl tag busybox myrepo/busybox
nerdctl push myrepo/busybox
nerdctl save -o busybox.tar busybox
nerdctl load -i busybox.tar

# 容器
nerdctl run -d --name nginx -p 8080:80 nginx
nerdctl ps -a
nerdctl exec -it nginx bash
nerdctl stop nginx
nerdctl start nginx
nerdctl rm nginx

# 网络
nerdctl network ls
nerdctl network inspect bridge

# 卷
nerdctl volume ls
nerdctl volume create data
nerdctl run -v data:/data busybox

配置 nerdctl 自动读取加速 :nerdctl 默认会读取 /etc/containerd/certs.d,无需额外设置。

5.3 crictl(K8s 专用)

安装 cri-tools

bash 复制代码
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" > /etc/apt/sources.list.d/kubernetes.list
apt update && apt install -y cri-tools=1.30.1-1.1

配置对接 containerd:

bash 复制代码
crictl config --set runtime-endpoint=unix:///var/run/containerd/containerd.sock

常用命令:

bash 复制代码
crictl images
crictl ps -a
crictl pods
crictl pull hello-world
crictl exec -it <container-id> sh

注意crictl 主要用于 K8s 节点问题排查,不适合日常开发。


六、总结与避坑指南

6.1 关键结论

  1. 系统安装断网,避免漫长等待。
  2. netplan 管理网络,记得 netplan apply 生效。
  3. apt 是日常包管理首选,比 dpkg 更智能。
  4. containerd 镜像加速certs.d 方式,1.7.x 和 2.x 都支持。
  5. 日常使用用 nerdctl,别用 ctr;crictl 留给 K8s 排错。

6.2 常见问题

问题 解决方案
netplan apply 后网络未生效 检查 YAML 缩进,执行 sudo chmod 600 配置文件
apt update 更换国内镜像源(阿里/华为/清华)
拉取镜像超时 检查 certs.d 配置是否生效,重启 containerd
nerdctl 找不到网络 确保 CNI 插件已安装到 /opt/cni/bin
crictl 连接失败 确认 runtime-endpoint 配置正确,且 containerd 已启动

写在最后

这篇文章覆盖了从 Ubuntu 24.04 系统初始化到容器运行时部署的完整链路,尤其对 containerd 的三种客户端做了详细对比。希望它能成为你运维和容器化路上的一个实用手册。

如果你觉得有用,欢迎点赞、收藏、评论~ 也欢迎关注我的 CSDN,后续会继续分享 Kubernetes、云原生相关的实战笔记。