像使用Docker一样丝滑的使用Containerd

# 像使用Docker一样丝滑的使用Containerd > 🍎都知道,K8s弃用Docker,正式使用`Containerd`将其取代,但是经过那么久的时间相处,对Docker的使用习惯还是比较难改变。但是`containerd`自带的`CLI`工具`ctr`和`crictl`目前存在很多短板,不够友好。 `ctr` 的设计对人类不太友好,例如缺少以下这些和 Docker 类似的功能: - `docker run -p ` - `docker run --restart=always` - 通过凭证文件 `~/.docker/config.json` 来拉取镜像 - `docker logs` `crictl`工具相对`ctr`来说稍微友好一些,`crictl还没有tag命令`,但是还上没有`docker`使用上那么丝滑呀。 ## `nerdctl`工具真心丝滑 ```bash nerdctl run -d -p 8080:80 --name=nginx --restart=always nginx #和使用docker一样丝滑 docker run -d -p 8080:80 --name=nginx --restart=always nginx ``` `nerdctl`具备很多`docker`不具备的功能,如延迟拉镜像,镜像加密等。 ### `nerdctl`具备但是`Docker`不具备的一些功能 1. 延迟拉取镜像`lazy-pulling` 2. 镜像加密`imgcrypt` 3. 递归只读 (RRO) 绑定安装 4. 推送时对容器镜像进行签名 ```bash nerdctl push --sign=cosign --cosign-key cosign.key devopps/hello-world nerdctl pull --verify=cosign --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.example.com devopps/hello-world ``` 5. 可以使用 IPFS 在没有注册表的情况下分发容器镜像 6. 一次将容器连接到多个网络 `nerdctl run --net foo --net bar` 7. 更好的多平台支持 `nerdctl pull --all-platforms IMAGE` 8. 指定一个非图像根文件系统 `nerdctl run -it --rootfs /bin/sh` 9. [使用 bypass4netns 加速无根容器](https://github.com/containerd/nerdctl/blob/main/docs/rootless.md "使用 bypass4netns 加速无根容器")`nerdctl run --label nerdctl/bypass4netns=true` ## 如何使用`nerdctl` github 下载链接: > [https://github.com/containerd/nerdctl/releases](https://github.com/containerd/nerdctl/releases "https://github.com/containerd/nerdctl/releases") - **精简 (nerdctl--linux-amd64.tar.gz): 只包含 nerdctl** - **完整 (nerdctl-full--linux-amd64.tar.gz): 包含 containerd, runc, and CNI 等依赖** 安装方法比较简单,将下载的二进制文件解压到`$PATH` 目录即可 ```bash wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz tar Cxzvvf /usr/local/bin nerdctl-1.4.0-linux-amd64.tar.gz ``` 安装好 `nerdctl` 后,就可以使用 `nerdctl` 来运行容器了。前提是先安装好`Containerd`哈。 ```bash nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:alpine ``` ### 使用`nerdctl`构建镜像 需要先安装软件:`buildkit` 将其解压到 `$PATH` 中: ```bash wget https://github.com/moby/buildkit/releases/download/v0.8.2/buildkit-v0.8.2.darwin-amd64.tar.gz tar -C /usr/local/ -zxvf buildkit-v0.8.2.linux-amd64.tar.gz ``` 编写 `systemd unit` 文件: ```bash # cat /etc/systemd/system/buildkit.service [Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit [Service] ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true [Install] WantedBy=multi-user.target ``` 启用 buildkit.service 并设置开机自动运行:`systemctl enable --now buildkit.service` 接下来就是镜像的构建了,使用方法与docker完全一样!不再描述 ## 附上一些常用的命令 | 命令 | docker/nerdctl | ctr | crictl | | ------------ | -------------------------- | ---------------------------- | ------------------ | | 查看运行的容器 | docker/nerdctl ps | ctr task ls/ctr container ls | crictl ps | | 查看镜像 | docker/nerdctl images | ctr image ls | crictl images | | 查看容器日志 | docker/nerdctl logs | 无 | crictl logs | | 查看容器数据信息 | docker/nerdctl inspect | ctr container info | crictl inspect | | 查看容器资源 | docker/nerdctl stats | 无 | crictl stats | | 启动/关闭已有的容器 | docker/nerdctl start/stop | ctr task start/kill | crictl start/stop | | 运行一个新的容器 | docker/nerdctl run | ctr run | 无(最小单元为 pod) | | 打标签 | docker/nerdctl tag | ctr image tag | 无 | | 创建一个新的容器 | docker/nerdctl create | ctr container create | crictl create | | 导入镜像 | docker/nerdctl load | ctr image import | 无 | | 导出镜像 | docker/nerdctl save | ctr image export | 无 | | 删除容器 | docker/nerdctl rm | ctr container rm | crictl rm | | 删除镜像 | docker/nerdctl rmi | ctr image rm | crictl rmi | | 拉取镜像 | docker /nerdctl pull | ctr image pull | ctictl pull | | 推送镜像 | docker/nerdctl push | ctr image push | 无 | | 登录或在容器内部执行命令 | docker/nerdctl exec | 无 | crictl exec | | 清空不用的容器 | docker/nerdctl image prune | 无 | crictl rmi --prune | | 登录镜像仓库 | docker/nerdctl login | 无 | 无 | | 查看网络情况 | docker/nerdctl network ls | | | | 查看数据卷情况 | docker/nerdctl volume ls | | | 本文由[mdnice](https://mdnice.com/?platform=6)多平台发布
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容