背景介绍
最近因为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.toml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
version = 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 2
data_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
的image
nerdctl -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
参数。如下:
|
|