背景介绍
最近因为docker不让商用,需付费的操作,导致项目上为了合规,急需替换docker。
普遍采用的是containerd + nerdctl的组合。
containerd: 是一个容器运行时,负责容器的创建、运行、暂停、恢复、删除等操作。
k8s的底层使用的就是containerd,所以稳定性是可以满足的,containerd代码地址。
nerdctl: 是一个containerd的命令行工具,用于管理containerd中的容器,nerdctl代码地址。
本次nerdctl的安装版本为:v2.1.4。
安装部署
nerdctl依赖另外两个软件runc和cni。可以单独安装,这里不采用此种方式,
直接下载nerdctl完全包,里面会自带containerd,runc,cni等二进制程序,直接运行即可。
-
下载
nerdctl完全包:wget https://github.com/containerd/nerdctl/releases/download/v2.1.4/nerdctl-full-2.1.4-linux-amd64.tar.gz -
解压:
tar Cxzvvf /usr/local nerdctl-full-2.1.4-linux-amd64.tar.gz -
生成
containerd的默认配置:containerd config default > /etc/containerd/config.toml -
修改
containerd的运行目录:vim /etc/containerd/config.toml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19version = 3 root = '/var/lib/containerd' state = '/run/containerd' temp = '' disabled_plugins = [] required_plugins = [] oom_score = 0 imports = [] [grpc] address = '/run/containerd/containerd.sock' tcp_address = '' tcp_tls_ca = '' tcp_tls_cert = '' tcp_tls_key = '' uid = 0 gid = 0 max_recv_message_size = 16777216 max_send_message_size = 16777216修改
root和state的目录到磁盘空间大的目录,其他/run/containerd/相关的目录一起修改。 -
启动
containerd服务:systemctl enable containerd && systemctl start containerd -
创建
nerdctl的配置文件:mkdir -p /etc/nerdctl && touch /etc/nerdctl/nerdctl.toml新增配置data_root,更改containerd的日志产生的目录到磁盘较大的空间:1 2data_root="/home/nerdctl" cni_path="/usr/local/libexec/cni"其他的参数可参考:
nerdctl的配置说明
使用以上的步骤, containerd正常运行,nerdctl也可以使用了。
使用改造
说明:
containerd可以直接使用docker生成的image,为了尽可能少改动,所以就不使用nerdctl重新build镜像了。- 之前的容器使用
docker-compose管理的, 现在也延用之前的docker-compose.yaml。
-
创建命名空间
nerdctl namespace create sbc -
导入
docker的imagenerdctl -n sbc load -i opensips.tar -
运行容器
nerdctl -n sbc compose -f docker-compose.yaml up -d -
验证容器是否运行:
nerdctl -n sbc ps -
查看容器的日志:
nerdctl -n sbc logs sbc
其他说明
因为nerdctl并不像docker那样可以通过配置/etc/docker/daemon.json来统一设置log的日志输出参数。
所以需要单个服务的docker-compose.yaml中, 配置logging参数。如下:
|
|