10 KiB
title, date, tags
| title | date | tags |
|---|---|---|
| ArchLinux | 2025-07-28 10:26:05 |
WSL
安装
在线安装
wsl --install archlinux
包管理器 pacman
安装软件
pacman -S fastfetch
更新库
pacman -Syyu
Vim设置
编辑当前用户下的vim配置文件~/.vimrc
if has('mouse')
set mouse-=a
endif
set number
syntax on
set ignorecase
set t_Co=256
Containerd + Nerdctl
安装
1. 更新系统
首先,确保你的 Arch Linux 系统是最新的:
sudo pacman -Syu
2. 安装 Containerd
Containerd 是一个核心的容器运行时。它作为 containerd 包在官方仓库中提供。
sudo pacman -S containerd
安装完成后,你需要启动并启用 Containerd 服务,以便它在系统启动时自动运行:
sudo systemctl enable --now containerd
你可以通过以下命令检查 Containerd 的运行状态:
sudo systemctl status containerd
确保它显示为 active (running)。
3.安装Nerdctl
sudo pacman -S nerdctl
4.安装CNI Plugin
从Github上下载
wget https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz
解压到指定目录/opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.7.1.tgz -C /opt/cni/bin
即可完成安装
可以验证下
nerdctl run -it hello-world
不报错,并且输出了结果,说明已经安装好了 CNI Plugin。
5.安装Buildkit
下载 BuildKit 二进制文件:
wget https://github.com/moby/buildkit/releases/download/v0.23.2/buildkit-v0.23.2.linux-amd64.tar.gz
解压到临时目录下
tar -zxvf
安装 buildctl 和 buildkitd
将解压后的 bin 目录中的 buildctl 和 buildkitd 可执行文件移动到系统 $PATH 中的某个目录,例如 /usr/local/bin。
sudo mv /tmp/bin/buildctl /usr/local/bin/
sudo mv /tmp/bin/buildkitd /usr/local/bin/
验证 buildctl 是否在 $PATH 中
which buildctl
buildctl version
如果显示路径和版本信息,说明 buildctl 已经正确安装并可执行。
启动 BuildKit 守护进程 (buildkitd)
配置为 Systemd 服务
创建一个 systemd service 文件,例如 /etc/systemd/system/buildkit.service
[Unit]
Description=BuildKit Daemon
Documentation=https://github.com/moby/buildkit
[Service]
ExecStart=/usr/local/bin/buildkitd --addr unix:///run/buildkit/buildkitd.sock
Type=notify
Delegate=yes
KillMode=process
# 在某些环境中,可能需要调整用户和组
# User=buildkit
# Group=buildkit
[Install]
WantedBy=multi-user.target
保存后,重载 systemd 并启动服务
sudo systemctl daemon-reload
sudo systemctl enable buildkit # 设置开机自启
sudo systemctl start buildkit
检查 BuildKit 状态
sudo systemctl status buildkit
配置buildkitd镜像加速,解决构建时的镜像拉取问题
BuildKit Daemon 的配置文件 (buildkitd.toml): BuildKit 守护进程 (buildkitd) 可以通过配置文件进行更高级的配置,通常是 /etc/buildkit/buildkitd.toml(或 rootless 模式下的 ~/.config/buildkit/buildkitd.toml)。在这个文件中,可以配置:
-
Registry Mirrors (镜像加速器/代理): 为特定仓库定义镜像源,例如将
docker.io的请求重定向到私有加速器。mkdir -p /etc/buildkit vim /etc/buildkit/buildkitd.toml添加以下内容
# registry configures a new Docker register used for cache import or output. [registry."docker.io"] # mirror configuration to handle path in case a mirror registry requires a /project path rather than just a host:port mirrors = ["https://docker.m.daocloud.io", "https://docker.imgdb.de", "https://docker-0.unsee.tech", "https://docker.hlmirror.com", "https://docker.1ms.run", "https://cjie.eu.org", "https://func.ink", "https://lispy.org", "https://docker.xiaogenban1993.com"] # Use plain HTTP to connect to the mirrors. http = true保存后,重启服务生效
systemctl restart buildkit
Containerd的config.toml实现镜像加速
containerd/docs/cri/config.md at main · containerd/containerd
如果没有/etc/containerd/config.toml,执行以下命令生成默认配置
sudo containerd config default | sudo tee /etc/containerd/config.toml
编辑Containerd的配置文件,添加以下镜像配置
# 找到[plugins.'io.containerd.grpc.v1.cri']配置处
[plugins.'io.containerd.grpc.v1.cri']
disable_tcp_service = true
stream_server_address = '127.0.0.1'
stream_server_port = '0'
stream_idle_timeout = '4h0m0s'
enable_tls_streaming = false
[plugins.'io.containerd.grpc.v1.cri'.x509_key_pair_streaming]
tls_cert_file = ''
tls_key_file = ''
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry] #在这里增加
config_path = "/etc/containerd/certs.d"
创建目录/etc/containerd/certs.d/docker.io
mkdir -p /etc/containerd/certs.d/docker.io
进入到创建好的目录下,编辑文件hosts.toml
server = "https://docker.io"
[host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
[host."https://docker.imgdb.de"]
capabilities = ["pull", "resolve"]
然后重启containerd服务即可
systemctl restart containerd
containerd管理命令介绍
使用docker作为容器运行时需要经过多层转换(kubelet <-> dockershim <-> docker <-> containerd),这会导致连接不稳定和性能下降。K8s从v1.24版本开始,不再支持docker容器运行时,而是默认使用containerd
切换到containerd之后,有以下几种替代docker的管理命令:
使用k8s自带的crictl命令。crictl是一个符合CRI接口规范的命令行工具,可以用它来检查和管理kubelet节点上的容器运行时和镜像。 使用containerd自带的ctr命令。ctr是一个本地CLI工具,可以用它来管理镜像、容器、任务、快照等。因为containerd支持多个命名空间,所以ctr命令需要指定命名空间。要管理k8s创建的容器,需要使用k8s.io名字空间,即ctr -n k8s.io。 使用containerd额外提供的nerdctl工具。nerdctl是一个与docker兼容的containerd的命令行工具,需要额外安装。它支持一些docker没有的功能,比如延迟拉取镜像、镜像加密等。 使用其他第三方管理容器的开源工具。
docker、crictl和ctr命令对比
| 命令 | docker | crictl(k8s) | ctr(containerd) | nerdctl(containerd) |
|---|---|---|---|---|
| 查看运行的容器 | docker ps | crictl ps | ctr task ls/ctr container ls | nerdctl ps |
| 查看镜像 | docker images | crictl images | ctr image ls | nerdctl images |
| 查看容器日志 | docker logs | crictl logs | 无 | nerdctl logs |
| 查看容器信息 | docker inspect | crictl inspect | ctr container info | nerdctl inspect |
| 查看容器资源使用 | docker stats | crictl stats | 无 | nerdctl stats |
| 启动/关闭已有的容器 | docker start/stop | crictl start/stop | ctr task start/kill | nerdctl start/stop |
| 运行一个新的容器 | docker run | 比较麻烦,因为它的最小单元为 Pod | ctr run | nerdctl run |
| 创建一个新的容器 | docker create | 比较麻烦,因为它的最小单元为 Pod | ctr container create | nerdctl create |
| 在容器内部执行命令 | docker exec | crictl exec | 无 | nerdctl exec |
| 删除容器 | docker rm | crictl rm | ctr container rm | nerdctl rm |
| 删除镜像 | docker rmi | crictl rmi | ctr image rm | nerdctl rmi |
| 导入镜像 | docker load | 无 | ctr image import | nerdctl load |
| 导出镜像 | docker save | 无 | ctr image export | nerdctl save |
| 拉取镜像 | docker pull | crictl pull | ctr image pull | nerdctl pull |
| 给镜像打标签 | docker tag | 无 | ctr image tag | nerdctl tag |
| 推送镜像 | docker push | 无 | ctr image push | nerdctl push |
| 构建镜像 | docker build | 无 | 无 | nerdctl build |
(需要额外安装buildkit服务) 注意:ctr和nerdctl命令需要指定名字空间,管理k8s创建的容器,需要使用k8s.io名字空间,即ctr/nerdctl -n k8s.io。

