一张脉络看懂 Ubuntu24.04:网络配置 + deb 包管理 + Containerd 容器实操
·
第一部分 Ubuntu 24.04 系统安装
1.1 安装过程





提示:为了防止连网更新软件包,该地方需断开网卡安装系统。系统安装完成后,再配置网络。

更改地址为 http://mirrors.aliyun.com/ubuntu
使用华为的mirror速度更快:http://mirrors.huaweicloud.com/ubuntu








等待安装完成,该过程需要从Internet上下载软件包,还可以查看安装日志。

安装完成

重启系统

出现以下提示,不用理会,直接 回车 继续重启。
[FAIED] Failed unmounting /dev/cdrom
1.2 系统初始化配置
1.2.1 安装基础工具
liu@ubuntu2404:~$ sudo apt-get install -y vim bash-completion
1.2.2 Netplan 静态 IP 配置
- 备份默认网络配置
liu@ubuntu2404:~$ cd /etc/netplan/
liu@ubuntu2404:/etc/netplan$ sudo mkdir backup
liu@ubuntu2404:/etc/netplan$ sudo mv 50-cloud-init.yaml backup
- 新建静态网络配置
00-installer-config.yaml
liu@ubuntu2404:/etc/netplan$ sudo vim 00-installer-config.yaml
# This is the network config written by 'subiquity'
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
- 223.6.6.6
version: 2
- 权限加固并生效配置
liu@ubuntu2404:/etc/netplan$ sudo chmod 600 00-installer-config.yaml
liu@ubuntu2404:/etc/netplan$ sudo netplan apply
1.2.3 开启 Root 账号远程 SSH 登录
- 设置 root 密码
liu@ubuntu2404:~$ sudo passwd root
# 输入当前用户密码,再设置root新密码
- 修改 SSH 配置允许 root 登录
liu@ubuntu2404:~$ sudo vim /etc/ssh/sshd_config
# 注释原有配置,修改为
PermitRootLogin yes
- 重载 SSH 服务并设置开机自启
liu@ubuntu2404:~$ sudo systemctl reload ssh
liu@ubuntu2404:~$ sudo systemctl enable ssh
第二部分 Ubuntu 网络深度解析
2.1 Netplan 网络管理工具
核心介绍
Netplan 是 Ubuntu 官方开发的网络配置前端工具,底层支持两种渲染器:NetworkManager、systemd-networkd。
- 配置文件统一存放路径:
/etc/netplan/*.yaml - 官方示例配置目录:
/usr/share/doc/netplan/examples
两种常用配置模板
- 静态 IP 模板 static.yaml
root@ubuntu2204:/usr/share/doc/netplan/examples# cat static.yaml
network:
ethernets:
ens33:
dhcp4: no
addresses:
- 10.1.8.88/24
routes:
- to: default
via: 10.1.8.2
nameservers:
addresses:
- 10.1.8.2
- 223.5.5.5
version: 2
- DHCP 自动获取 IP 模板 dhcp.yaml
root@ubuntu2204:/usr/share/doc/netplan/examples# cat dhcp.yaml
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
Netplan 核心操作命令
# 应用网络配置
root@ubuntu2204:~# netplan apply
# 查看当前生效网络配置
root@ubuntu2204:~# netplan get
network:
version: 2
ethernets:
ens33:
addresses:
- "10.1.8.88/24"
nameservers:
addresses:
- 10.1.8.2
- 223.5.5.5
dhcp4: false
routes:
- to: "default"
via: "10.1.8.2"
2.2 系统域名解析机制
2.3.1 查询优先级:files > dns
配置文件 /etc/nsswitch.conf 控制解析顺序:
root@ubuntu:~# grep host /etc/nsswitch.conf
hosts: files dns
- files 模块(本地 hosts,优先级最高)
- 读取文件:
/etc/hosts,无需网络、本地直接匹配 - 适用场景:局域网静态域名、本地测试、屏蔽恶意域名
- 格式示例:
192.168.1.10 server.local
- 读取文件:
- dns 模块(联网 DNS 查询,次级)
- 依赖
systemd-resolved本地 DNS 缓存服务 - hosts 无匹配时才会发起公网 DNS 查询
- 依赖
2.2.2 systemd-resolved 分层 DNS 查询优先级
本地缓存 > 网卡链路 DNS > 全局 DNS > 兜底 Fallback DNS
- 本地缓存操作
resolvectl flush-caches # 清空DNS缓存
resolvectl show-cache # 查看缓存记录
resolvectl statistics # 缓存统计
- 查看网卡专属 DNS
root@ubuntu:~# resolvectl status ens32
Link 2 (ens32)
Current Scopes: DNS
Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 10.1.8.2
DNS Servers: 10.1.8.2 223.5.5.5
- 全局 DNS 配置
/etc/systemd/resolved.conf
[Resolve]
DNS=223.5.5.5 223.6.6.6
# FallbackDNS=1.1.1.1
2.2.3 补充关键知识点
/etc/resolv.conf 为软链接指向本地缓存 127.0.0.53,不会直接显示 Netplan 配置的公网 DNS;Netplan 配置仅传递给 systemd-networkd 与 resolved 作为运行时链路 DNS。
第三部分 Ubuntu Deb 软件包管理体系
3.1 deb 包内部结构
deb 压缩包分为两大块:
-
系统安装目录:
etc/ usr/ opt/等程序文件 -
DEBIAN 控制目录(核心元数据 + 脚本)
文件 作用 control 包核心描述(名称、版本、依赖、架构) preinst 安装前执行脚本 postinst 安装后配置脚本 prerm 卸载前执行脚本 postrm 卸载后清理脚本
control 文件标准示例:
Package: mysoftware
Version: 2016-02-26
Section: free
Priority: optional
Depends: libssl.0.0.so, libstdc++2.10-glibc2.2
Suggests: Openssl
Architecture: i386
Installed-Size: 66666
Maintainer: Simon
Description: just for test
3.2 三大底层工具:dpkg-query /dpkg-deb/dpkg
3.2.1 dpkg-query:查询已安装软件包信息
dpkg-query -l # 列出所有已安装包
dpkg-query -s openssh-server # 查看软件完整状态
dpkg-query -W openssh-server # 查看软件版本
dpkg-query -L openssh-server # 查看软件安装的所有文件
dpkg-query -S /usr/bin/rz # 查询文件归属哪个包
dpkg-query --control-list openssh-server # 查看包控制脚本
3.2.2 dpkg-deb:离线解析本地 deb 文件
dpkg-deb -c xxx.deb # 查看deb内所有文件
dpkg-deb -I xxx.deb # 读取DEBIAN目录元数据
dpkg-deb -f xxx.deb # 读取control配置
dpkg-deb -e xxx.deb # 提取DEBIAN控制目录
dpkg-deb -x xxx.deb ./dir # 提取程序文件
dpkg-deb -R xxx.deb ./dir # 完整提取控制文件+程序文件
3.2.3 dpkg:本地 deb 安装卸载工具
局限:无法自动处理依赖,依赖缺失会安装失败
dpkg -i xxx.deb # 安装离线包
dpkg -r lrzsz # 卸载软件(保留配置)
dpkg -V lrzsz # 校验文件完整性
3.3 APT 工具集(在线仓库管理,推荐日常使用)
3.3.1 apt vs apt-get/apt-cache 命令对照表
| 新式 apt 命令 | 旧工具等价命令 | 功能 |
|---|---|---|
| apt install | apt-get install | 安装软件 |
| apt remove | apt-get remove | 卸载软件 |
| apt purge | apt-get purge | 卸载 + 删除配置 |
| apt update | apt-get update | 更新仓库索引 |
| 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-cache pkgnames | 列出已安装包 |
3.3.2 apt 高频实操命令
root@ubuntu2204:~# apt update
# 同步仓库软件清单(必执行前置)
# 查看本机所有已安装包
root@ubuntu2204:~# apt list
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Listing...
0ad-data-common/jammy,jammy 0.0.25b-1 all
0ad-data/jammy,jammy 0.0.25b-1 all
0ad/jammy 0.0.25b-2 amd64
0install-core/jammy 2.16-2 amd64
......
# 按名称搜索软件
root@ubuntu2204:~#apt search --names-only nginx
# 查看仓库软件详情
root@ubuntu2204:~# apt show openssh-server
# 仅下载deb不安装
root@ubuntu2204:~# apt download openssh-server
root@ubuntu2204:~# ls
openssh-server_1%3a8.9p1-3ubuntu0.1_amd64.deb
# 编辑软件源(需提前export EDITOR=vim)
root@ubuntu2204:~# export EDITOR=vim
root@ubuntu2204:~# apt edit-sources
# 使用vim编辑文件 /etc/apt/sources.list
3.3.3 apt-file:根据文件反向查所属软件包
# 更新apt仓库中文件清单缓存
root@ubuntu2204:~# apt-file update
# 仓库中某个软件包的文件清单
root@ubuntu2204:~# apt-file list openssh-server
openssh-server: /etc/default/ssh
openssh-server: /etc/init.d/ssh
openssh-server: /etc/pam.d/sshd
openssh-server: /etc/ssh/moduli
openssh-server: /etc/ufw/applications.d/openssh-server
openssh-server: /lib/systemd/system/rescue-ssh.target
... ...
# 使用正则表达式查询ifconfig工具由哪个软件包提供
root@ubuntu2204:~# apt-file -x search '.*bin/ifconfig$'
net-tools: /sbin/ifconfig
3.4 软件源 sources.list 配置详解
源文件存放位置
- 主配置:
/etc/apt/sources.list - 扩展源:
/etc/apt/sources.list.d/*.list
源单行格式
档案类型 镜像地址 系统代号 软件分类
- deb:二进制安装包;deb-src:源码包
- 软件分类说明
- main:官方免费支持软件
- restricted:官方闭源驱动类软件
- universe:社区维护开源软件
- multiverse:闭源商业软件
更换国内源完整流程
# 1. 复制源文件备份,以防万一
liu@ubuntu2404:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 2. 查看新版本信息。Ubuntu18.04版之前的任一版更改apt源为国内源方法内容大同小异,每一版内容不同的地方就是版本号。
liu@ubuntu2404:~$ lsb_release -c
Codename: bionic
# 3. 替换为阿里云Ubuntu24.04(noble)源
# 3. 编辑源列表文件
liu@ubuntu2404:~$ sudo vi /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
# 4. 执行以下命令获取最新软件列表
liu@ubuntu2404:~$ sudo apt-get update
第四部分 Containerd 容器运行时全解
4.1 基础概念与学习必要性
- 定位:CNCF 毕业工业级容器运行时,K8s 1.24 + 弃用 dockershim 后标准底层容器引擎
- 分层架构(自上而下)
- 客户端层:nerdctl /ctr/crictl /kubelet
- 服务层:containerd 守护进程 gRPC 服务
- 核心插件层:镜像、容器、CRI、存储、CNI 网络插件
- 底层依赖:runc (OCI 运行时)、内核 namespace/cgroup/overlayfs
- 两套安装包版本对比(Ubuntu24.04)
- 系统自带 containerd:1.7.x,稳定、适配系统内核,无捆绑 Docker
- Docker 源 containerd.io:2.x 新版本,功能新,与 docker-ce 配套使用
4.2 Containerd 部署(Ubuntu24.04)
4.2.1 安装软件
root@ubuntu2404:~# apt install -y containerd=1.7.12-0ubuntu4
4.2.2 生成默认配置文件
root@ubuntu2404:~# mkdir /etc/containerd
root@ubuntu2404:~# containerd config default > /etc/containerd/config.toml
4.2.3 镜像加速核心配置(推荐 certs.d 新标准)
- 修改 config.toml 开启统一加速目录
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
- 配置 docker.io 国内镜像
root@ubuntu2404:~# mkdir -p /etc/containerd/certs.d/docker.io
root@ubuntu2404:~# 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
- 配置 k8s 官方镜像加速
root@ubuntu2404:~# mkdir -p /etc/containerd/certs.d/registry.k8s.io
root@ubuntu2404:~# cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml << EOF
server = "https://registry.k8s.io"
# 首选 DaoCloud
[host."https://k8s.m.daocloud.io"]
capabilities = ["pull", "resolve"]
[host."https://09def58152000fc00ff0c00057bad7e0.mirror.swr.myhuaweicloud.com"]
capabilities = ["pull", "resolve"]
EOF
- 重启 containerd 生效
root@ubuntu2404:~# systemctl restart containerd
4.2.4 关键区分点
- 旧版 mirrors 内嵌配置:仅 CRI (crictl/k8s) 生效,原生 ctr 不识别
- certs.d 标准配置:ctr、nerdctl、crictl 全部兼容,1.6 + 推荐,2.x 强制使用
第五部分 Nerdctl 实操(Docker 兼容客户端)
5.1 Nerdctl 完整安装部署
# 1. 解压nerdctl二进制
root@ubuntu2404:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/nerdctl-1.7.7-linux-amd64.tar.gz
root@ubuntu2404:~# tar -xf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/bin/
# 2. 命令补全
root@ubuntu2404:~# apt install -y bash-completion
root@ubuntu2404:~# [ ! -d /etc/bash_completion.d ] && mkdir /etc/bash_completion.d
root@ubuntu2404:~# nerdctl completion bash > /etc/bash_completion.d/nerdctl
root@ubuntu2404:~# source /etc/bash_completion.d/nerdctl
# 3. 安装CNI网络插件
root@ubuntu2404:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/cni-plugins-linux-amd64-v1.6.0.tgz
root@ubuntu2404:~# mkdir -p /opt/cni/bin
root@ubuntu2404:~# tar -xf cni-plugins-linux-amd64-v1.6.0.tgz -C /opt/cni/bin
# 4. 内核网络参数优化(K8s通用)
root@ubuntu2404:~# apt install -y iptables
# 加载模块
root@ubuntu2404:~# modprobe -a overlay br_netfilter
root@ubuntu2404:~# cat > /etc/modules-load.d/k8s-net.conf << EOF
br_netfilter
overlay
EOF
# 配置内核参数
root@ubuntu2404:~# 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
root@ubuntu2404:~# sysctl -p /etc/sysctl.d/k8s.conf
# 验证部署
root@ubuntu2404:~# nerdctl version
WARN[0000] unable to determine buildctl version: exec: "buildctl": executable file not found in $PATH
Client:
Version: v1.7.7
OS/Arch: linux/amd64
Git commit: 5882c720f4e7f358fb26b759e514b3ae9dd8ea83
buildctl:
Version:
Server:
containerd:
Version: 1.7.12
GitCommit:
runc:
Version: 1.3.4-0ubuntu1~24.04.1
root@ubuntu2404:~# nerdctl info
Client:
Namespace: default
Debug Mode: false
Server:
Server Version: 1.7.12
Storage Driver: overlayfs
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Log: fluentd journald json-file syslog
Storage: native overlayfs
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.8.0-31-generic
Operating System: Ubuntu 24.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.778GiB
Name: ubuntu2404
ID: 9f3569cd-5ac4-40d4-acdc-5ff271ad5916
5.2 镜像管理常用命令
nerdctl images # 查看本地镜像
nerdctl pull busybox # 拉取镜像(自动读取certs.d加速)
nerdctl tag busybox my/busybox # 镜像打标签
nerdctl login # 登录私有仓库
nerdctl push my/busybox # 推送镜像
nerdctl save busybox -o b.tar # 导出镜像包
nerdctl load -i b.tar # 导入镜像包
nerdctl rmi busybox # 删除镜像
nerdctl image prune -af # 清理所有无用镜像
nerdctl inspect nginx # 查看镜像详情
nerdctl history nginx # 查看镜像分层构建记录
5.3 容器生命周期管理
nerdctl ps # 查看运行中容器
nerdctl ps -a # 查看全部容器(含停止)
# 前台交互式运行
nerdctl run -it --name test ubuntu
# 后台守护运行、端口映射、数据挂载
nerdctl run -d -p 8080:80 -v /data:/data --name nginx nginx
nerdctl stop nginx # 优雅停止容器
nerdctl start nginx # 启动停止的容器
nerdctl restart nginx # 重启容器
nerdctl exec -it nginx bash # 进入运行中容器
nerdctl logs nginx # 查看容器日志
nerdctl rm test # 删除停止容器
nerdctl container prune -f # 批量清理停止容器
nerdctl port nginx # 查看端口映射
nerdctl cp /tmp/file nginx:/tmp # 宿主机与容器互传文件
nerdctl inspect nginx # 查看容器完整元数据
5.4 网络、存储、命名空间操作
网络管理(默认 bridge 网桥 nerdctl0)
root@ubuntu2404:~# nerdctl network ls
NETWORK ID NAME FILE
17f29b073143 bridge /etc/cni/net.d/nerdctl-bridge.conflist
host
none
root@ubuntu2404:~# nerdctl network inspect bridge
[
{
"Name": "bridge",
"Id": "17f29b073143d8cd97b5bbe492bdeffec1c5fee55cc1fe2112c8b9335f8b6121",
"IPAM": {
"Config": [
{
"Subnet": "10.4.0.0/24",
"Gateway": "10.4.0.1"
}
]
},
"Labels": {
"nerdctl/default-network": "true"
}
}
]
# 主机中nerdctl0就是容器的网关
root@ubuntu2404:~# ip addr show nerdctl0
6: nerdctl0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether a6:4c:c0:32:6a:5c brd ff:ff:ff:ff:ff:ff
inet 10.4.0.1/24 brd 10.4.0.255 scope global nerdctl0
valid_lft forever preferred_lft forever
inet6 fe80::a44c:c0ff:fe32:6a5c/64 scope link
valid_lft forever preferred_lft forever
持久化存储 Volume
root@ubuntu2404:~# nerdctl run -d -v data:/data busybox -- sleep infinity
dd82eea219b39c0b53257201b7528c2c52d8a886cd35108b55136c78b9525a48
root@ubuntu2404:~# nerdctl exec busybox-dd82e -- touch /data/f1
root@ubuntu2404:~# nerdctl volume ls
VOLUME NAME DIRECTORY
data /var/lib/nerdctl/1935db59/volumes/k8s.io/data/_data
root@ubuntu2404:~# ls /var/lib/nerdctl/1935db59/volumes/k8s.io/data/_data
f1
Containerd 命名空间隔离
root@ubuntu2404:~# nerdctl namespace ls
NAME CONTAINERS IMAGES VOLUMES LABELS
k8s.io 3 2 1
更多推荐



所有评论(0)