定制开发环境Docker镜像
简介
Xiaomi Cloud-ML支持Bring Your Own Image功能,允许用户传入自定义的Docker镜像来启动开发环境。
注意,用户提供的镜像地址应该是公开可访问的,如果在DockerHub中下载镜像和启动任务时间较长。
制作Docker镜像
Cloud-ML的镜像中包含了平台通用的python,nvidia cuda,FDS FUSE等软件依赖。因此不推荐用户从头制作docker镜像,建议使用Cloud-ML的镜像作为基础镜像,进行增量修改。
和普通docker镜像制作过程相同,用户可以使用Dockerfile和docker commit
两种方式制作新的镜像。下面分别举例介绍两种方式。
使用Dockerfile制作docker镜像
创建Dockerfile,使用某个Cloud-ML镜像作为基础镜像,添加用户自定义的内容。举例如下:
FROM cnbj6-repo.cloud.mi.com//cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0
# Install python3
apt-get install python3
# Add local files
COPY init_env.py /
编译Dockerfile,生成镜像
docker build -t cnbj6-repo.cloud.mi.com//user1/tensorflow-gpu:1.3.0-xm1.0.0-python3 .
推送镜像到docker registry, (不熟悉docker registry的用户可以参考http://docs.api.xiaomi.net/docker-registry/)
docker login cnbj6-repo.cloud.mi.com/
docker push cnbj6-repo.cloud.mi.com//user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
使用docker commit
制作docker镜像
使用某个Cloud-ML镜像创建容器,进入容器后添加用户自定义的内容
docker run it --name mycontainer1 cnbj6-repo.cloud.mi.com//cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0 bash
apt-get install python3
echo "export PYTHONUNBUFFERED=0" > /init_env.py
打包docker容器,生成镜像
docker commit --change='/prepare_dev.py && /run_jupyter.sh' mycontainer1 cnbj6-repo.cloud.mi.com//user1/tensorflow-gpu:1.3.0-xm1.0.0-python3 .
推送镜像到docker registry, (不熟悉docker registry的用户可以参考http://docs.api.xiaomi.net/docker-registry/)
docker login cnbj6-repo.cloud.mi.com/
docker push cnbj6-repo.cloud.mi.com//user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
使用示例
用户创建开发环境时指定Docker镜像地址即可。
cloudml dev create -n mydev -p mypassword -d cnbj6-repo.cloud.mi.com//user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
参数介绍
-d
表示用户指定的Docker镜像地址,注意不可与-F
和-V
参数同时使用。
注意:
Cloud-ML DevEnv的启动脚本是 /prepare_dev.py && /run_jupyter.sh
,启动的时候会默认执行/prepare_dev.py && /run_jupyter.sh
,所以,这个文件是必须的,里面的内容则可以根据自己的具体情况定义。