nerdctl使用
官方地址:https://github.com/containerd/nerdctl
参考文档:https://blog.csdn.net/catoop/article/details/128033743
nerdctl是什么
nerdctl
是一个专门用于containerd
且兼容docker cli的命令行工具,有如下特征:
-
与docker的UI/UX相同
-
支持docker-compose(例如nerdctl compose up)
-
【可选】支持rootless模式,无slirp开销,参考这里
-
【可选】支持加密镜像(ocicrypt)
-
【可选】支持P2P镜像分发(IPFS)
-
【可选】支持容器镜像签名和验证(cosign)
下载安装
nerdctl的安装分为Minimal精简安装和包含一些插件的full完整安装。精简版只包含nerdctl,完整版则包含nerdctl和CNI插件等依赖
- Minimal(
nerdctl-1.0.0-linux-amd64.tar.gz
):仅包含nerdctl - Full(
nerdctl-full-1.0.0-linux-amd64.tar.gz
):包含containerd、runc、CNI等依赖
~]# wget https://github.com/containerd/nerdctl/releases/download/v1.0.0/nerdctl-1.0.0-linux-amd64.tar.gz
~]# tar xf nerdctl-1.0.0-linux-amd64.tar.gz -C /usr/local/bin/
~]# nerdctl --version
nerdctl version 1.0.0
如果习惯了docker的话可以设置一个别名,绝大多数情况下docker命令和nerdctl命令是等价的
~]# echo 'alias docker=nerdctl' >> ~/.bashrc
动机
nerdctl的目标是促进试验Docker中没有的最前沿的容器特性。这些特性包括但不限于lazy-pulling(stargz)和镜像加密(ocicrypt)。这些功能预计最终也会在Docker中实现,然而,这可能需要几个月,甚至几年的时间,因为Docker目前只设计使用了容器子系统的一小部分
此外,nerdctl
可能对调试 Kubernetes 集群很有用,但这不是主要目标。
nerdctl
中存在但是docker
中不存在的特性
主要的:
- 按需拉取镜像(延迟拉取):
nerdctl --snapshotter=stargz|nydus|overlaybd run IMAGE
- 对镜像加密和解密:
nerdctl image (encrypt|decrypt) SRC DST
- 使用IPFS的P2P分发镜像:
nerdctl run ipfs://CID
- 绑定挂载时候支持递归只读权限:(
nerdctl run -v /mnt:/mnt:rro
使子/mnt/usb
级也成为只读)。需要内核 >= 5.12,并且 crun >= 1.4 或 runc >= 1.1 (PR #3272 )。 - Cosign 集成:
nerdctl pull --verify=cosign
andnerdctl push --sign=cosign
,在 Compose 中 - 使用byass4net加速rootless容器:
nerdctl run --label nerdctl/bypass4netns=true
次要的:
- 命名空间:
nerdctl --namespace=<NS> ps
. (注意:所有 Kubernetes 容器都在k8s.io
命名空间中) - 导出 Docker/OCI 两种格式的压缩文件:
nerdctl save
- 导入 OCI和Docker 两种格式的压缩文件:
nerdctl load
- 指定一个非图像根文件系统:
nerdctl run -it --rootfs <ROOTFS> /bin/sh
。CLI 语法符合 Podman 约定。 - 一次将容器连接到多个网络:
nerdctl run --net foo --net bar
- Running FreeBSD jails.
- 更好的多平台支持,例如:
nerdctl pull --all-platforms IMAGE
- 将(现有的)AppArmor 配置文件应用于无根容器:
nerdctl run --security-opt apparmor=<PROFILE>
. 用于sudo nerdctl apparmor load
加载nerdctl-default
配置文件。
其他类似工具
ctr
ctr
: 不兼容Docker CLI,对用户不友好。值得注意的是,ctr
缺少以下 nerdctl 命令的等效项:
nerdctl run -p <PORT>
nerdctl run --restart=always --net=bridge
nerdctl pull
with~/.docker/config.json
和凭据助手二进制文件,例如docker-credential-ecr-login
nerdctl logs
nerdctl build
nerdctl compose up
crictl
crictl
:不兼容Docker CLI,对用户不友好,不支持非CRI特性
pouchcontainer
PouchContainer(被遗弃?):需要一个额外的守护进程
nerdctl常见用法
列出本地kubernetes容器
# nerdctl --namespace k8s.io ps -a
列出本地kubernetes镜像
# nerdctl -n k8s.io image ls
为本地kubernetes构建镜像,且不使用镜像仓库
# nerdctl --namespace k8s.io build -t foo /some-dockerfile-directory
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
imagePullPolicy: Never
EOF
将镜像文件加载到本地kubernetes
# nerdctl --namespace k8s.io load < /path/to/image.tar
创建rootless容器
参考:https://github.com/containerd/nerdctl/blob/main/docs/rootless.md
#启用rootless容器
$ containerd-rootless-setuptool.sh install
#使用rootless containerd运行容器
$ nerdctl run -d -p 8080:80 --name nginx nginx:alpine
运行docker-compose
# nerdctl compose -f ./examples/compose-wordpress/docker-compose.yaml up
所有命令参考
命令参数太多,有部分命令和参数和docker有区别,具体看官方文档:https://github.com/containerd/nerdctl#whale-blue_square-nerdctl-run
容器管理
- nerdctl run
- nerdctl exec
- nerdctl create
- nerdctl ps
- nerdctl inspect
- nerdctl logs
- nerdctl port
- nerdctl rm
- nerdctl stop
- nerdctl start
- nerdctl restart
- nerdctl update
- nerdctl wait
- nerdctl kill
- nerdctl pause
- nerdctl unpause
- nerdctl rename
- nerdctl container prune
构建镜像
- nerdctl build
- nerdctl commit
镜像管理
- nerdctl images
- nerdctl pull
- nerdctl push
- nerdctl load
- nerdctl save
- nerdctl tag
- nerdctl rmi
- nerdctl image inspect
- nerdctl image history
- nerdctl image prune
- nerdctl image convert
- nerdctl image encrypt
- nerdctl image decrypt
镜像仓库
- nerdctl login
- nerdctl logout
网络管理
- nerdctl network create
- nerdctl network ls
- nerdctl network inspect
- nerdctl network rm
- nerdctl network prune
存储卷管理
- nerdctl volume create
- nerdctl volume ls
- nerdctl volume inspect
- nerdctl volume rm
- nerdctl volume prune
命名空间管理
- nerdctl namespace create
- nerdctl namespace inspect
- nerdctl namespace ls
- nerdctl namespace remove
- nerdctl namespace update
AppArmor
- nerdctl apparmor inspect
- nerdctl apparmor load
- nerdctl apparmor ls
- nerdctl apparmor unload
system
- nerdctl events
- nerdctl info
- nerdctl version
- nerdctl system prune
stats
- nerdctl stats
- nerdctl top
命令行补全
编辑 ~/.bash_profile
:
source <(nerdctl completion bash)
compose
- nerdctl compose
- nerdctl compose up
- nerdctl compose logs
- nerdctl compose build
- nerdctl compose down
- nerdctl compose images
- nerdctl compose stop
- nerdctl compose ps
- nerdctl compose pull
- nerdctl compose push
- nerdctl compose config
- nerdctl compose kill
- nerdctl compose restart
- nerdctl compose rm
- nerdctl compose run
- nerdctl compose version
IPFS
全局配置
- 🤓 🟦
--address
: containerd 地址,可选择带有“unix://”前缀 - 🤓 🟦
-a
,--host
,-H
: 弃用的别名--address
- 🤓 🟦
--namespace
: containerd 命名空间 - 🤓 🟦
-n
: 弃用的别名--namespace
- 🤓 🟦
--snapshotter
: 容器快照 - 🤓 🟦
--storage-driver
: 弃用的别名--snapshotter
- 🤓 🟦
--cni-path
: CNI 二进制路径 (默认:/opt/cni/bin
) [$CNI_PATH
] - 🤓 🟦
--cni-netconfpath
: CNI netconf 路径 (默认:/etc/cni/net.d
) [$NETCONFPATH
] - 🤓 🟦
--data-root
: nerdctl 数据根,例如“/var/lib/nerdctl” - 🤓
--cgroup-manager=(cgroupfs|systemd|none)
: cgroup 管理员- 默认值:cgroup v2(rootful 和 rootless)上的“systemd”,v1 rootful 上的“cgroupfs”,v1 rootless 上的“none”
- 🤓
--insecure-registry
: 跳过验证 HTTPS 证书,并允许回退到纯 HTTP
全局标志也可以在/etc/nerdctl/nerdctl.toml
(rootful) 和~/.config/nerdctl/nerdctl.toml
(rootless) 中指定。看./docs/config.md
。
还未实现的docker命令
容器管理:
docker attach
docker diff
docker checkpoint *
镜像:
docker export
和docker import
docker trust *
(相反,nerdctl 支持nerdctl pull --verify=cosign
和nerdctl push --sign=cosign
。请参阅./docs/cosign.md
。)docker manifest *
网络管理:
docker network connect
docker network disconnect
registry:
docker search
compose:
docker-compose create|events|exec|pause|port|scale|start|top|unpause
其他:
docker system df
docker context
- Swarm 命令未实现,将不执行:
docker swarm|node|service|config|secret|stack *
- 插件命令未实现,不会实现:
docker plugin *
其他文档
配置指南:
./docs/config.md
: 配置 (/etc/nerdctl/nerdctl.toml
,~/.config/nerdctl/nerdctl.toml
)./docs/registry.md
: 注册表验证 (~/.docker/config.json
)
基本特点:
./docs/compose.md
:撰写./docs/rootless.md
: 无根模式./docs/cni.md
: 容器网络的 CNI./docs/build.md
:nerdctl build
使用 BuildKit
高级功能:
./docs/stargz.md
: 使用 Stargz Snapshotter 进行延迟拉取./docs/nydus.md
: 使用 Nydus Snapshotter 进行延迟拉取./docs/overlaybd.md
: 使用 OverlayBD Snapshotter 延迟拉取./docs/ocicrypt.md
:运行加密图像./docs/gpu.md
: 在容器内使用 GPU./docs/multi-platform.md
: 多平台模式
实验特点:
./docs/experimental.md
: 实验功能./docs/freebsd.md
: 运行 FreeBSD 监狱./docs/ipfs.md
: 在 IPFS 上分发图像./docs/builder-debug.md
: Dockerfile的交互调试
实施细节:
./docs/dir.md
: 目录布局 (/var/lib/nerdctl
)
杂项:
./docs/faq.md
: 常见问题解答和故障排除