阿里云Docker 镜像服务
专为阿里云GPU物理机定制的深度学习和HPC工具集,在阿里云Docker Hub上发布。
1 阿里云官方Docker Hub地址
http://dev.aliyun.com/search.html
2 新用户
第一次使用阿里云Docker服务,用户需要先注册成为开发者,步骤如下:
打开上面的阿里云Docker Hub,未登陆的,先使用云账号登录,登录/注册在左上角; 点击右上角“管理中心”,如下图:
对新用户会弹出去注册开发者的页面:
注册成功之后,点击“进入管理控制台”,下次进入也可以在Docker Hub页面,点击右上角“管理中心”进入。界面如下:
选择左侧的“Docker服务”下面的“镜像管理”标签,新用户会提示设置自己的镜像仓库“命名空间”和密码。命名空间是私人镜像的地址前缀。完成设置之后,可以开始使用阿里云Docker仓库。
3 使用 Docker
3.1 docker 仓库地址
阿里云官方docker仓库地址为:
registry.aliyuncs.com(公网)
在GPU物理机上,对应替换为内网地址:
registry-internal.aliyuncs.com(内网)
3.2 运行 Hello World
(GPU物理机预装CentOS 7系统,以下操作仅以CentOS 7为例,且使用root用户) 首先检查机器上安装的docker服务状态:
# docker info
正常会显示当前存储空间等信息。如果出错,请先尝试重启docker服务:
# systemctl restart docker
下一步,使用阿里云账号和之前设定的docker仓库密码,登录阿里云docker仓库:
# docker login registry-internal.aliyuncs.com
运行 Hello World:
# docker run registry-internal.aliyuncs.com/alicloudhpc/hello-world
如果一切正常,说明机器的docker服务运行正常。
3.3 使用深度学习和HPC工具集
工具集的发布地址是:
http://dev.aliyun.com/detail.html?repoId=2
列出了包含的软件工具和简介。
登录之后,可以下载toolkit的镜像到本地:
# docker pull registry-internal.aliyuncs.com/alicloudhpc/toolkit
重命名一个短名称:
# docker tag registry-internal.aliyuncs.com/alicloudhpc/toolkit toolkit
因为需要在docker容器中使用gpu设备,启动docker容器需要设定额外参数。推荐将如下内容保存到一个shell脚本(比如run-toolkit.sh),方便以后运行:
#!/bin/bash
DOCKER_BIN="/usr/bin/docker"
INTERACT="-ti"
#INTERACT="-d"
DATA_VOLUME="/disk1"
DATA_MOUNT_POINT="/disk1"
MEM_LIMIT=96g
set -e
if [ $# -lt 2 ]; then
echo "Usage: $0 image command"
exit -1
else
IMAGE=$1
shift 1
CMD=$@
fi
devices=$(ls -1 /dev | grep nvidia)
dev_param=""
for d in $devices; do
dev_param="$dev_param --device=/dev/$d"
done
time_param='-v /etc/localtime:/etc/localtime:ro'
if [ ! -z "$CUDA_VISIBLE_DEVICES" ]; then
dev_env="-e CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES"
else
dev_env=""
fi
exec $DOCKER_BIN run \
"$INTERACT" \
-P \
$dev_env \
$dev_param \
$time_param \
-m $MEM_LIMIT \
-v $DATA_VOLUME:$DATA_MOUNT_POINT \
"$IMAGE" \
$CMD
运行脚本,启动toolkit:
# chmod +x run-toolkit.sh
# ./run-toolkit.sh toolkit /bin/bash
成功运行之后,已经进入交互式的docker容器(理解为一个与host隔离的运行环境)中,物理机上的 /disk1 磁盘映射到容器内的 /disk1 文件夹,建议数据只存储到 /disk1 下(如果容器销毁,其他数据不会保留)。
检查GPU工作正常:
# /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery
检查通过以后,您可以像普通终端一样,运行软件。
3.4 重新进入
在交互式docker容器中,如果您运行 exit,退出docker容器之后,该容器即停止。如果您在容器中修改了 /disk1 以外的内容(比如安装软件),下次还需要继续使用,则不应该运行 run-toolkit.sh 新建容器,而是重启原先的,操作如下:
查询已经停止的容器id:
# docker ps -a
返回结果中,复制下需要重启的容器的 container_id
重启容器:
# docker start container_id
成功则返回一串重复的id
重新进入交互式docker容器:
# docker attatch container_id
4. 使用进阶
4.1 获得更新
如果toolkit发布新的版本,可以重新pull获得更新:
# docker pull registry-internal.aliyuncs.com/alicloudhpc/toolkit
重命名一个短名称:
# docker tag registry-internal.aliyuncs.com/alicloudhpc/toolkit toolkit
4.2 创建私有镜像
访问阿里云docker控制台:
http://console.d.aliyun.com/index2.html/?#/docker/image/list
可以创建自己的私有镜像(选择本地仓库)。
使用和创建本地镜像的方法,可以参考docker官方文档相关部分:
http://docs.docker.com/userguide/dockerimages
另外有一份中文教程:http://www.docker.org.cn/book/docker.html (有些过时) 注意内网环境下,添加或者替换docker仓库的域名。
本地镜像创建完成后,通过docker push上传到阿里云docker仓库:
# docker tag some-image registry-internal.aliyuncs.com/YOUR_NAMESPCE/YOUR_REPO
# docker push registry-internal.aliyuncs.com/YOUR_NAMESPCE/YOUR_REPO