容器统一架构图:【转自ISula容器引擎 (openeuler.org)】
1 下载安装
iSulad容器的下载安装只需要很简单的一条命令:
yum install -y iSulad
安装完成。
2 容器配置
以配置nginx服务器为例。
2.1 启动isula
systemctl start isulad
2.2 查看isula
systemctl status isulad
2.3 镜像操作
isula images #确认当前镜像
isula pull nginx #拉取nginx镜像
2.4 查看配置文件
-
查看/etc/isulad/daemon.json:
-
设置json中的registry-mirrors:
"registry-mirrors": [
"docker.io"
],
-
重启isula服务
2.5 运行服务
-
启动、容器确认
-
进入容器确认
此时nginx容器已经可以正常运行了。
3 容器管理
以创建和管理busybox为例。
3.1 创建容器
isula create 命令用于创建一个新的容器。容器引擎会使用指定的容器镜像创建容器读写层,或者使用指定的本地rootfs作为容器的运行环境。创建完成后,会将容器的ID输出到标准输出,后续可以使用isula start 命令启动该容器。新创建的容器状态为inited状态。
用法
isula create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例
创建一个新容器
3.2 启动容器
isula start命令用于启动一个或多个容器。
用法
isula start [OPTIONS] CONTAINER [CONTAINER...]
示例
启动一个新容器(start后面为上面创建的新容器的容器ID的头部的一部分)
3.3 运行容器
isula run命令命令用于创建一个新的容器。会使用指定的容器镜像创建容器读写层,并且为运行指定的命令做好准备。创建完成后,使用指定的命令启动该容器。run命令相当于create然后start容器。
用法
isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...]
示例
运行一个新容器busybox
3.4 停止容器
isula stop命令用于停止一个或多个运行中的容器。首先向容器中的首进程会发送SIGTERM信号,在指定时间(默认为10s)内容器未停止时,会发送SIGKILL。
用法
isula stop [OPTIONS] CONTAINER [CONTAINER...]
示例
停止一个容器
3.5 强制停止容器
isula kill命令用于强制停止一个或多个运行中的容器。
用法
isula kill [OPTIONS] CONTAINER [CONTAINER...]
示例
杀掉一个容器
3.6 删除容器
isula rm命令用于删除一个或多个容器。
用法
isula rm [OPTIONS] CONTAINER [CONTAINER...]
示例
删除一个停止状态的容器
3.7 接入容器
isula attach命令用于将当前终端的标准输入、标准输出和标准错误连接到正在运行的容器。仅支持runtime类型为lcr的容器。
用法
isula attach [OPTIONS] CONTAINER
示例
接入一个运行状态的容器
3.8 重命名容器
isula rename命令用于重命名容器。
用法
isula rename [OPTIONS] OLD_NAME NEW_NAME
示例
重命名一个容器
3.9 在容器中执行新命令
isula exec命令用于正在运行的容器中运行一个新命令。新执行的命令将在容器的默认目录中运行。如果基础镜像指定了自定义目录,则将使用该目录。
用法
isula exec [OPTIONS] CONTAINER COMMAND [ARG...]
示例
在运行中的容器中,执行echo命令
3.10 查询单个容器信息
isula inspect提供了容器的详细信息。
用法
isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
示例
查询容器信息,包括该容器ID、容器名称、创建日期、路径、状态信息(暂停、运行、停止),以及各项配置信息。
3.11 查询所有容器信息
isula ps 用于查询所有容器的信息。
用法
isula ps [OPTIONS]
示例
查询所有容器信息
# isula ps -a
从图可看出该命令可查询所有容器的容器ID、镜像、命令类型、创建时间、当前状态(停止、运行、暂停)、端口和容器名。
3.12 重启容器
isula restart 用于重启一个或者多个容器。
用法
isula restart [OPTIONS] CONTAINER [CONTAINER...]
示例
重启单个容器
# isula restart c75284634beeede(容器ID部分首部)
3.13 等待容器退出
isula wait用于等待一个或者多个容器退出。仅支持runtime类型为lcr的容器。
用法
isula wait [OPTIONS] CONTAINER [CONTAINER...]
示例
等待单个容器退出
# isula wait c75284634beeede(容器ID部分首部)
137
3.14 查看容器中进程信息
isula top用于查看容器中的进程信息。仅支持runtime类型为lcr的容器。
用法
isula top [OPTIONS] container [ps options]
示例
查询容器中进程信息
可看到容器的使用用户、进程号、开始时间、命令类型等等。
3.15 查看容器使用的资源
isula stats用于实时显示资源使用的统计信息。仅支持runtime类型为lcr的容器。
用法
isula stats [OPTIONS] [CONTAINER...]
示例
显示资源使用的统计信息
# isula stats --no-stream e9b998d05644 (容器ID部分首部)
3.16 获取容器日志
isula logs用于获取容器的日志。仅支持runtime类型为lcr的容器。
用法
isula logs [OPTIONS] [CONTAINER...]
示例
获取容器日志
# isula logs 6a144695f5dae8(容器ID部分首部)
可以看到使用该容器执行的命令。
3.17 容器与主机之间数据拷贝
isula cp 用于容器与主机之间的数据拷贝,仅支持runtime类型为lcr的容器。
用法
isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
示例
将主机/root/testdir目录拷贝到容器9e9c7d36bb2e的/目录下。
isula cp /root/testdir 9e9c7d36bb2e:/
将容器9e9c7d36bb2e的/testdir2目录拷贝到主机的/root目录中。
isula cp 9e9c7d36bb2e:/testfir2 /root
3.18 暂停容器
isula pause用于暂停容器中所有的进程,仅支持runtime类型为lcr的容器。
用法
isula pause CONTAINER [CONTAINER...]
示例
暂停一个正在运行的容器,命令示例如下:
# isula pause 8fe25506fb58(容器ID部分首部)
3.19 恢复容器
isula unpause用于恢复容器中所有的进程, 为isula pause的逆过程,仅支持runtime类型为lcr的容器。
用法
isula unpause CONTAINER [CONTAINER...]
示例
恢复一个被暂停的容器,命令示例如下:
# isula unpause 8fe25506fb5(容器ID部分首部)
3.20 从服务端实时获取事件消息
isula events用于从服务端实时获取容器镜像生命周期、运行等事件消息, 仅支持runtime类型为lcr的容器。
用法
isula events [OPTIONS]
示例
从服务端实时获取事件消息,命令示例如下:
# isula events
4 特权容器
iSulad默认启动的是普通容器,普通容器适合启动普通进程,其权限非常受限,仅具备/etc/default/isulad/config.json中capabilities所定义的默认权限。当需要特权操作时(比如操作/sys下的设备),需要特权容器完成这些操作,使用该特性,容器内的root将拥有宿主机的root权限, 否则,容器内的root在只是宿主机的普通用户权限。
iSulad使用–privileged给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。
isula run --rm -it --privileged busybox
例如使用–privileged给busybox容器添加特权模式:
5 查询容器信息
5.1 查询服务版本信息
isula version 命令用于查询iSulad服务的版本信息。
用法
isula version
实例
如果isulad服务正常运行,则可以查看到客户端、服务端以及OCI config的版本等信息。
若isulad服务未运行,则仅仅查询到客户端的信息,并提示无法连接到服务端。因此,isula version命令也常常用来检验isulad是否正常运行。
5.2 查询系统级信息
isula info命令用于对系统级信息,以及容器和镜像数目等信息的查询。
用法
isula info
示例
查询系统级信息,可以展示容器数目,镜像数目,内核版本、操作系统等信息
图中显示信息:
-
本主机下有两个容器,且都处于停止状态;
-
镜像共2个,即本次实验用到的 nginx 和 busybox;
-
存储驱动为overlay2,文件系统ext;
-
内核版本:5.10.0,即openEuler内核实验一编译的最新内核。
-
操作系统:openEuler 20.03(linux发行版);
-
处理器架构:x86;
-
CPU 核心数:4,内存大小为 4G;
-
isula 容器根目录:/var/lib/isulad。
6 实验总结
本次实验在openeuler内核实验特别是docker学习的基础上,专门就isula容器展开探索,参考了ISula容器引擎 (openeuler.org)文档,以及其他容器相关知识,认识并掌握了容器的创建、管理、安全特性,体会到了容器相比于虚拟机来讲的简单便捷,为开发者提供了一个很好的开发环境,而不会受硬件和架构的限制,底噪开销更小,可应用领域更为广泛。不但可以提高现有应用的安全性和可移植性,还能节约成本,节约人力物力资源。对于初学者而言,可以在需要使用一些系统环境时快速地利用容器而不需要搭建虚拟机。
通过 OS 课程中对 Linux 系统的学习,我开始领悟到了 linux 操作系统在系统管理上的方便性。简洁的目录结构、清晰的系统逻辑都是它的强大之处。但是真正学习它并且运用自如确实是需要一定的实践积累,而且用户与系统的接触相比Windows要更多,且操作几乎都在命令行实现(所以作为初学者,我安装了桌面环境),这就导致它对于习惯使用图形化操作系统的人而言不那么容易上手。不过上手之后就会轻松许多。
另外,各种linux发行版,如最我开始接触的 ubuntu、最近学习的 openEuler、CentOS,虽然系统不同,但是对于文件管理、shell 命令、用户管理、设备管理以及网络管理的差别都不是很大,所以无论学习哪一种 linux 发行版本,都是事半功倍的,对于深刻了解操作系统底层机理会有很大帮助,也为以后的学习研究与工作打下一些基础。