Ubuntu系统和CentOS系统到底区别在哪?全面从docker到k8s进阶!!!
2026/8/29 7:09:08 网站建设 项目流程

Ubuntu :apt 包管理与 containerd + nerdctl 容器化入门

整理自 2026-08-04 一次完整的终端实操日志(11:05 — 16:59)。已忽略误输、重复内容,超长的帮助信息以......省略。环境:Ubuntu(主机名ubuntu2204,软件源为 noble/24.04,apt 2.7.14,root 用户)。

📑 目录

💡 点击章节标题可跳转,每个章节末尾都有「回到目录」链接。

章节核心内容
① apt 包管理(对标 yum)软件源缓存、查询、安装、卸载、升级、源与密钥
② containerd 安装与配置指定版本安装、certs.d 镜像加速、K8s 内核参数
③ nerdctl 安装与 bash 补全二进制安装、CNI 插件、bash 补全踩坑
④ 镜像管理 nerdctl imagepull、tag、login、push、save/load、prune
⑤ 容器管理 nerdctl container运行、生命周期、exec、日志、端口映射
⑥ 容器网络bridge 子网、容器 IP、容器互通验证
⑦ 数据卷与 namespacebind mount、命名卷、k8s.io 命名空间
⑧ 命令速查表apt vs yum 对照、nerdctl 常用命令

一、apt 包管理(对标 yum)

apt 是 Debian/Ubuntu 系的包管理器,功能上对标 CentOS 的 yum。本次从帮助信息开始逐一实践。

1.1 更新软件源缓存

aptupdate

作用相当于yum makecache,把阿里云等源的软件包索引拉到本地:

Get:1 http://mirrors.aliyun.com/ubuntu noble InRelease [256 kB] ... Fetched 38.1 MB in 56s (685 kB/s) 286 packages can be upgraded. Run 'apt list --upgradable' to see them.

1.2 查询软件包

aptlist# 列出所有可安装包(输出很长,略)aptlist openssh-server# 查看指定包状态aptlist openssh*# 通配符匹配aptlist openssh-server-a# 查看该包所有可用版本

-a显示多版本,例如:

openssh-server/noble-updates,noble-security 1:9.6p1-3ubuntu13.18 amd64 [upgradable from: 1:9.6p1-3ubuntu13] openssh-server/noble,now 1:9.6p1-3ubuntu13 amd64 [installed,upgradable to: 1:9.6p1-3ubuntu13.18]

1.3 查看包详细信息

aptshow openssh-server

输出包含版本、维护者、依赖、大小、描述等,如:

Package: openssh-server Version: 1:9.6p1-3ubuntu13.18 Priority: optional Section: net Source: openssh ... Depends: adduser, libpam-modules, ... Download-Size: 511 kB Description: secure shell (SSH) server, for secure access from remote machines

1.4 搜索软件包

aptsearch --names-only apache2

只按包名匹配(不加--names-only会做全文搜索),结果如:

apache2/noble-updates,noble-security 2.4.58-1ubuntu8.15 amd64 Apache HTTP Server apache2-bin/... Apache HTTP Server (modules and other binary files) apache2-data/... Apache HTTP Server (common files)

1.5 安装 / 重装 / 卸载

aptinstallapache2-y# 安装(-y 免确认)aptreinstall apache2-y# 重装aptremove apache2-y# 卸载(保留配置文件)aptautoremove-y# 清理不再需要的依赖包

安装指定版本(后面 containerd 就用到了):

aptinstall-ycontainerd=1.7.12-0ubuntu4

踩坑:1.7.12-Oubuntu4(大写 O)是误输,正确写法是0ubuntu4(数字 0),否则报E: Version '1.7.12-Oubuntu4' for 'containerd' was not found

1.6 升级软件包

aptupgrade# 常规升级(安装/升级现有包)aptfull-upgrade openssh-server-y# 完整升级,可处理依赖变更

1.7 只下载不安装

aptdownload openssh-server

仅把.deb下载到当前目录,不做安装。

1.8 编辑软件源

exportEDITOR=vimaptedit-sources

默认用 vim 打开源配置文件,等价于手改/etc/apt/sources.list

1.9 apt-file:查包内文件清单

apt-file相当于 yum 的yum provides,可以反查“某个文件属于哪个包 / 某个包包含哪些文件”:

aptinstall-yapt-file apt-file update# 更新文件索引(比较慢,本次中途放弃)apt-file list openssh-server

apt-file --help的完整用法以......省略。

1.10 apt-key:管理仓库密钥

apt-key

用于添加/删除软件源的 GPG 公钥,帮助信息较长,此处省略(新版本建议使用sources.list内的signed-by方式)。

↑ 回到目录


二、containerd 安装与配置

目标:安装 containerd 并配置镜像加速,为 nerdctl/K8s 做准备。

2.1 安装指定版本

aptlist containerd-aaptinstall-ycontainerd=1.7.12-0ubuntu4

安装时自动带上依赖runc

The following NEW packages will be installed: containerd runc Need to get 48.2 MB of archives.

2.2 生成默认配置

mkdir/etc/containerd containerd config default>/etc/containerd/config.toml

默认配置里config_path是空的,需要改成 certs.d 目录以启用镜像加速:

[plugins."io.containerd.grpc.v1.cri".registry] config_path = "/etc/containerd/certs.d"

2.3 配置镜像加速(certs.d)

containerd 从 1.7 起支持按域名配置镜像仓库镜像(类似 Docker 的 daemon.json mirrors),配置目录为/etc/containerd/certs.d/<域名>/hosts.toml

docker.io(Docker Hub)加速:

mkdir-p/etc/containerd/certs.d/docker.iocat>/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 加速(K8s 官方镜像):

mkdir-p/etc/containerd/certs.d/registry.k8s.iocat>/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

内网/私有仓库 hub.laoma.cloud:

mkdir-p/etc/containerd/certs.d/hub.laoma.cloudcat>/etc/containerd/certs.d/hub.laoma.cloud/hosts.toml<<EOF server = "http://hub.laoma.cloud" [host."http://hub.laoma.cloud"] capabilities = ["pull", "resolve"] EOF

2.4 K8s 环境内核参数准备

加载网络相关内核模块并开启转发,属于部署 K8s 的标准前置步骤:

modprobe-aoverlay br_netfiltercat>/etc/modules-load.d/k8s-net.conf<<EOF br_netfilter overlay EOFcat>/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 EOFsysctl-p/etc/sysctl.d/k8s.conf

生效验证:

net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1

2.5 重启 containerd 使配置生效

systemctl restart containerd

↑ 回到目录


三、nerdctl 安装与 bash 补全

nerdctl 是 containerd 的 Docker 兼容命令行工具。

3.1 安装 nerdctl 与 CNI 插件

wgethttp://192.168.46.200/class/course-materials/softwares/stage03/nerdctl-1.7.7-linux-amd64.tar.gztar-xfnerdctl-1.7.7-linux-amd64.tar.gz-C/usr/bin/wgethttp://192.168.46.200/class/course-materials/softwares/stage03/cni-plugins-linux-amd64-v1.6.0.tgzmkdir-p/opt/cni/bintar-xfcni-plugins-linux-amd64-v1.6.0.tgz-C/opt/cni/bin

验证版本:

$ nerdctl version Client: Version: v1.7.7 OS/Arch: linux/amd64 Server: containerd: ...

3.2 bash 补全(含踩坑)

生成补全脚本时一直报错:

-bash: _get_comp_words_by_ref: command not found

原因是系统没装bash-completion。解决:

aptinstall-ybash-completionsource/root/.bashrc

补全脚本放哪其实无所谓(系统装好bash-completion后自动加载),本次把之前手动生成的脚本删掉、直接依赖系统机制:

rm-f/etc/bash_completion.d/nerdctlsource/root/.bashrc

↑ 回到目录


四、镜像管理(nerdctl image)

4.1 拉取镜像

nerdctl pull busybox# Docker Hub(走加速)nerdctl pull registry.k8s.io/pause:3.9# K8s 沙箱镜像(pause)nerdctl pull hub.laoma.cloud/library/mysql# 内网仓库镜像

pull 过程中可见resolving | downloading的进度条,走 hosts.toml 配置的加速镜像。

4.2 查看镜像

nerdctl images# 或 nerdctl image ls
REPOSITORY TAG IMAGE ID PLATFORM SIZE busybox latest dc2d74b28e4c linux/amd64 4.4 MiB ubuntu latest 678c6550cc43 linux/amd64 109.8 MiB hub.laoma.cloud/library/mysql latest 3b1edfde8351 linux/amd64 938.2 MiB hub.laoma.cloud/library/nginx 1.27 114dff0fc8ee linux/amd64 197.3 MiB registry.k8s.io/pause 3.9 7031c1b28338 linux/amd64 732.0 KiB

4.3 查看镜像详情

nerdctl image inspect busybox

输出 JSON 格式,包含IdRepoTagsRepoDigestsCreatedConfig等,长输出以......省略。

4.4 打标签、登录与推送

nerdctl tag busybox mage161196/busybox nerdctl image tag hub.laoma.cloud/library/nginx:1.27 hub.laoma.cloud/ningcode/nginx:1.27 nerdctl login hub.laoma.cloud-uadmin nerdctl push hub.laoma.cloud/ningcode/nginx:1.27

4.5 导出与导入

nerdctl image save busybox-obusybox.tar# 导出为 tarnerdctl imagermbusybox# 删除本地镜像nerdctl image load-ibusybox.tar# 从 tar 导入

4.6 清理与历史

nerdctl image prune-a--force# 清理全部未使用镜像nerdctl imagehistoryhub.laoma.cloud/library/mysql# 查看分层历史nerdctl imagermdocker.io/library/mysql

注意:镜像删除要用完整仓库名。日志中先执行nerdctl image rm docker.io/library/mysqlno such image,因为实际拉取的镜像名是hub.laoma.cloud/library/mysql

↑ 回到目录


五、容器管理(nerdctl container)

5.1 运行容器

nerdctl container run-itubuntu# 交互式运行,直接进入容器nerdctl run--nameweb-dhub.laoma.cloud/library/nginx:1.27# 后台运行 nginxnerdctl run-dnginx# 简写形式

注意:nerdctl不能省略,日志中误输run --name web ...直接报-bash: run: command not found

5.2 查看容器

nerdctl containerls# 只显示运行中的容器nerdctl containerls-a# 显示所有容器(含已退出)
CONTAINER ID IMAGE STATUS NAMES 32c67ad53ae5 hub.laoma.cloud/library/nginx:1.27 Up web 9fe197759311 docker.io/library/ubuntu:latest Exited (0) ubuntu ed1123ae9708 docker.io/library/ubuntu:latest Created ubuntu-ed112

5.3 生命周期管理

nerdctl containerrenameubuntu-1 ubuntu# 改名nerdctl container stop775# 停止nerdctl container start775# 启动nerdctl container restart775# 重启nerdctl container pause775/ unpause775# 暂停 / 恢复nerdctl containerrm592# 删除(需先 stop)

5.4 查看容器详情与“杀进程”实验

nerdctl container inspect775nerdctl container inspect775|grepPid

通过 inspect 拿到容器主进程 PID 后,直接kill 59856模拟容器主进程被杀的场景(进程退出容器即停止)。

5.5 在容器内执行命令

nerdctlexecbusybox-af1d1 --ipa# 查看容器内网络nerdctlexecbusybox-b2f40 --ls/data/f1

注意--前后要有空格:--ip会报参数解析错误。

5.6 查看日志

nerdctl container logs bb3f

5.7 端口映射

nerdctl container run--namenginx-d-p8080:80 nginx nerdctl container port nginx
80/tcp -> 0.0.0.0:8080

验证访问:

curl10.1.8.10:8080

返回Welcome to nginx!的 HTML 页面,端口映射成功。

↑ 回到目录


六、容器网络

6.1 默认 bridge 网络

nerdctl networklsnerdctl network inspect bridge
{"Name":"bridge","IPAM":{"Config":[{"Subnet":"10.4.0.0/24","Gateway":"10.4.0.1"}]},"Labels":{"nerdctl/default-network":"true"}}

宿主机侧网卡:

ipaddr show nerdctl0
3: nerdctl0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... inet 10.4.0.1/24 brd 10.4.0.255 scope global nerdctl0

6.2 容器内 IP

nerdctlexecbusybox-af1d1 --ipa

容器内eth0从 bridge 自动分配:

2: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 ... inet 10.4.0.12/24 brd 10.4.0.255 scope global eth0

本次实践里 nginx 容器web拿到10.4.0.3,容器间通过 bridge 直接互通:

curl10.4.0.3# 返回 nginx 欢迎页

↑ 回到目录


七、数据卷与 namespace

7.1 挂载宿主机目录(bind mount)

mkdir-p/data nerdctl run-d-v/data/:/data busybox --sleepinfinity

宿主机建文件,容器内立即可见:

touch/data/f1 nerdctlexecbusybox-b2f40 --ls/data/f1

7.2 命名卷(named volume)

nerdctl run-d-vdata:/data busybox --sleepinfinity nerdctlexecbusybox-3f2dc --touch/data/f1 nerdctl volumels

误输nerdctl -d -v ...(漏了 run)会报unknown shorthand flag: 'd'

7.3 namespace(命名空间)

nerdctl namespacels
NAME CONTAINERS IMAGES VOLUMES LABELS default 9 5 1

注:K8s 使用 containerd 时默认命名空间是k8s.io,与 nerdctl 默认的default不同。

↑ 回到目录


八、命令速查表

apt vs yum 对照

功能yumapt
更新缓存yum makecacheapt update
搜索yum searchapt search
查看详情yum infoapt show
安装yum installapt install
指定版本安装yum install pkg-版本apt install pkg=版本
重装yum reinstallapt reinstall
卸载yum removeapt remove
清理依赖yum autoremoveapt autoremove
升级yum updateapt upgrade / full-upgrade
查文件所属包yum providesapt-file search / list
只下载yumdownloaderapt download
编辑源vim /etc/yum.repos.d/apt edit-sources

nerdctl 常用命令

操作命令
拉取镜像nerdctl pull <镜像>
查看镜像nerdctl images
删除镜像nerdctl image rm <镜像>
导出/导入nerdctl image save -o x.tar <镜像>/nerdctl image load -i x.tar
登录/推送nerdctl login <仓库>/nerdctl push <仓库>/<镜像>
运行容器nerdctl run -d -p 8080:80 --name nginx nginx
查看容器nerdctl container ls -a
启停/重启nerdctl container start/stop/restart <ID>
暂停/恢复nerdctl container pause/unpause <ID>
进容器执行nerdctl exec <ID> -- <命令>
看日志nerdctl container logs <ID>
端口查看nerdctl container port <名称>
网络管理nerdctl network ls/inspect
数据卷nerdctl volume ls/create/rm
命名空间nerdctl namespace ls

↑ 回到目录


小结

  • apt 是 Ubuntu 的包管理核心,绝大多数操作与 yum 一一对应,重点是apt install 包名=版本号这种指定版本安装方式。
  • containerd 的镜像加速不再靠 daemon.json,而是每个仓库域名一个certs.d/<域名>/hosts.toml,并且要在config.toml里把config_path指到/etc/containerd/certs.d
  • nerdctl 是 containerd 的“docker 命令”,镜像、容器、网络、卷、namespace 的用法与 Docker 高度一致,适合作为 K8s 落地前的容器运行时演练。
  • 部署 K8s 前的内核参数(overlay、br_netfilter、ip_forward)在本次已提前配置好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询