第一部分 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 配置
  1. 备份默认网络配置
liu@ubuntu2404:~$ cd /etc/netplan/
liu@ubuntu2404:/etc/netplan$ sudo mkdir backup
liu@ubuntu2404:/etc/netplan$ sudo mv 50-cloud-init.yaml backup
  1. 新建静态网络配置 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
  1. 权限加固并生效配置
liu@ubuntu2404:/etc/netplan$ sudo chmod 600 00-installer-config.yaml
liu@ubuntu2404:/etc/netplan$ sudo netplan apply
1.2.3 开启 Root 账号远程 SSH 登录
  1. 设置 root 密码
liu@ubuntu2404:~$ sudo passwd root
# 输入当前用户密码,再设置root新密码
  1. 修改 SSH 配置允许 root 登录
liu@ubuntu2404:~$ sudo vim /etc/ssh/sshd_config
# 注释原有配置,修改为
PermitRootLogin yes
  1. 重载 SSH 服务并设置开机自启
liu@ubuntu2404:~$ sudo systemctl reload ssh
liu@ubuntu2404:~$ sudo systemctl enable ssh

第二部分 Ubuntu 网络深度解析

2.1 Netplan 网络管理工具

核心介绍

Netplan 是 Ubuntu 官方开发的网络配置前端工具,底层支持两种渲染器:NetworkManagersystemd-networkd

  • 配置文件统一存放路径:/etc/netplan/*.yaml
  • 官方示例配置目录:/usr/share/doc/netplan/examples
两种常用配置模板
  1. 静态 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
  1. 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
  1. files 模块(本地 hosts,优先级最高)
    • 读取文件:/etc/hosts,无需网络、本地直接匹配
    • 适用场景:局域网静态域名、本地测试、屏蔽恶意域名
    • 格式示例:192.168.1.10 server.local
  2. dns 模块(联网 DNS 查询,次级)
    • 依赖 systemd-resolved 本地 DNS 缓存服务
    • hosts 无匹配时才会发起公网 DNS 查询
2.2.2 systemd-resolved 分层 DNS 查询优先级

本地缓存 > 网卡链路 DNS > 全局 DNS > 兜底 Fallback DNS

  1. 本地缓存操作
resolvectl flush-caches    # 清空DNS缓存
resolvectl show-cache      # 查看缓存记录
resolvectl statistics      # 缓存统计
  1. 查看网卡专属 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
  1. 全局 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 压缩包分为两大块:

  1. 系统安装目录:etc/ usr/ opt/ 等程序文件

  2. 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 installapt-get install安装软件
apt removeapt-get remove卸载软件
apt purgeapt-get purge卸载 + 删除配置
apt updateapt-get update更新仓库索引
apt upgradeapt-get upgrade增量升级软件
apt full-upgradeapt-get dist-upgrade完整系统升级,自动增减依赖
apt searchapt-cache search搜索仓库软件
apt showapt-cache show查看包详情
apt list --installedapt-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 配置详解

源文件存放位置
  1. 主配置:/etc/apt/sources.list
  2. 扩展源:/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 基础概念与学习必要性

  1. 定位:CNCF 毕业工业级容器运行时,K8s 1.24 + 弃用 dockershim 后标准底层容器引擎
  2. 分层架构(自上而下)
    • 客户端层:nerdctl /ctr/crictl /kubelet
    • 服务层:containerd 守护进程 gRPC 服务
    • 核心插件层:镜像、容器、CRI、存储、CNI 网络插件
    • 底层依赖:runc (OCI 运行时)、内核 namespace/cgroup/overlayfs
  3. 两套安装包版本对比(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 新标准)
  1. 修改 config.toml 开启统一加速目录
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
  1. 配置 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
  1. 配置 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
  1. 重启 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   

更多推荐