制作ssh互信的docker镜像

Posted on 2018-01-04(星期四) 18:09 in Data

基于nvidia/cuda的镜像(nvidia/cuda:8.0-cudnn6-runtime-centos7)生成了一个的tensorflow-gpu 1.4.1编译版本的镜像,通过kubernetes(1.8.3)容器编排工具进行容器间的管理。现有六个节点,一台部署kubernetes,无GPU,还有一个节点有4块GPU,余下四个节点均有一块GPU,所有的GPU均为NVIDIA Gefore 1080Ti。为提高工作工程中试错效率,需要将GPU集群资源合理的利用起来,也即需要自动调度和并发使用GPU。经研究,opmpi + nccl(nvidia的)可以实现,但mpi需要集群间的各容器是互信的,但实际运行的环境中所有容器均来源于同一镜像,所以目的就是达到能免密登陆自己就可以了(其实免密登陆本机和登陆别的机器操作基本一样)

首先,要用docker启用一个container

sudo docker run -it nvidia/cuda:8.0-cudnn6-runtime-centos7

既然要使用ssh,那么我们肯定要安装ssh。

sudo yum -y install openssh-server openssh-clients

然后,生成公私钥

sshkey-gen -t rsa

然后回车,回车,回车,复制一份公钥生成 authorized_keys(PS: authorized_keys文件权限和id_dsa.pub一致即可)。

cp /root/.ssh/id_dsa.pub /root/.ssh/authorized_keys

修改配置 /etc/ssh/ssh_config, 去除第一次ssh远程登录时fingerprint指纹添加过程(第一次远程ssh主机时提示输入yes/no的过程):

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

然后,使用 docker ps 查看containerId,然后用 container commit CONTAINER 命令生成一个新镜像。

sudo docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]