Docker容器作业#
为了安全,AIP运行容器作业是使用与作业提交用户相同的uid和gid,这样即使容器挂在了主机上的文件夹,容器里的用户也不可逾越文件访问权限。AIP提供了部分命令替代少量的docker命令。
若用户需要自己制作镜像,则需要在自己的有root权限的服务器或虚拟机中执行docker命令。
提交Docker容器作业#
提交容器作业时用户需要指定容器镜像名,容器镜像名可以用环境变量CB_DOCKER_IMAGE或者csub的参数-di。例子:
csub -I -di centos:6 cat /etc/redhat-release
命令输出:
Job 4354 has been submitted to the default queue [medium].
Job 4354 is waiting to be started...
Job 4354 has started on host linux7.
CentOS release 6.10 (Final)
在运行Docker作业时,容器的CPU、GPU、内存等资源都由调度器根据资源调度来设定。用户可以在容器运行时看到所有容器进程和资源使用情况。命令 cjobs -l显示容器id和所有容器中的进程号。aip j i -p 显示所有容器进程的详细资源使用。
容器作业可以使用所有作业命令对其操作,包括监控所有属于作业的容器进程的资源使用、暂停和恢复容器进程。杀掉作业会杀掉容器作业的所有进程。
在运行中的Docker容器作业中执行命令#
如果容器作业可以远程访问,用户可以用以下命令模仿docker exec命令对容器作业进行操作,只是命令暂不支持docker exec的可选参数。例子:
cdexe 4354 bash
命令输出:
bash-4.2$ id
uid=997 gid=1006 groups=1006
bash-4.2$ exit
exit
私有容器镜像库登录#
容器的镜像可以从任何仓库中自动下拉(缺省为docker.io)。如果镜像为私有,AIP支持使用与HPC环境共享用户认证的镜像库中下拉镜像。运行的步骤为:
在AIP中注册密码,只需注册一次。如果密码修改了测序重新注册
cpasswd -p mypassword
登录到镜像库:
cdlogin harbor:443
以上的例子harbor为本地镜像库。该镜像库已与本地LDAP服务器集成。
该命令也可用于登录到第三方的镜像库中。命令句法为:cdlogin -u 用户名 -p 密码 服务器。其中“-p 密码”若不在命令行中,命令会提示输入密码:
cdlogin -u user1 harbor:443
Input Password:
Login Succeeded
提交作业
csub -I -di harbor:443/first/centos7 id
以上first/centos7为私有镜像。
从第三方的镜像库中引入镜像上传到本地镜像库#
AIP提供的cdimport用于实现docker pull; docker tag; docker push命令组合。例子如下:
cdimport docker.io/mstormo/suse harbor:443/myproj/suse
其中myproj是本地镜像库harbor中已有的项目名。
容器作业排错#
若容器作业失败,可以在/opt/skyformai/log/cbjm.<作业运行节点>.log里查看作业的”docker run”参数,判断命令行是否有问题。例子:
06/02 12:31:14 I 10.24.0 2069 insDockerContainerHead: Job <14485> Docker command: /usr/bin/docker run --name=CBJOB.14485 --network=host --init -i --rm --cpus=1 -e CB_ALLOCATION -e CB_JOBID -e CB_SUBCWD -e CB_PORT -e CB_HOSTIP -e HOME -u 0:0 rockylinux:9
然后根据作业提交传入的docker run参数在命令行里执行以下,看结果。