掌握思想是最重要的
可以通过面向对象的思想来理解docker,在docker中image可以看作是类,container可以看作是对象。
类可以继承和修改(自定义),docker image亦如此,类的定义,对应Dockerfile, 举例说明:
创建一个pytorch开发环境(docker image)
Dockerfile
# use docker image as an python develop environment
# image env: ubuntu:16.04+cuda:9.0+git + tree + vim + python3.7+ anaconda3 + pytorch1.3
# inherit from nvidia/cuda official image from docker hub
# The machine running the CUDA container only requires the NVIDIA driver,
# the CUDA toolkit doesn't have to be installed.
# choose runtime nvidia/cuda image(include cuda toolkit) is ok.
FROM nvidia/cuda:10.1-runtime-ubuntu16.04
# image creator
MAINTAINER xxx <xxx@163.com>
# bash command pipeline
RUN apt-get update
RUN apt-get install -y wget
RUN apt-get install -y bzip2
RUN apt-get install -y python3-dev
RUN apt-get install -y libevent-dev
RUN apt-get install -y gcc
RUN apt-get install -y g++
RUN apt-get install -y vim
RUN apt-get install -y tree
RUN apt-get update
# install Anaconda3
RUN wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh -O ~/anaconda3.sh
RUN bash ~/anaconda3.sh -b -p /home/anaconda3 \
&& rm ~/anaconda3.sh
ENV PATH /home/anaconda3/bin:$PATH
# install pytorch
RUN conda install pytorch torchvision cudatoolkit=10.1 -c pytorch -y
RUN pip install numpy
RUN pip install tqdm
build image
cd ~
mkdir dockerfile # 最好单独新建一个文件夹,不然可能报错
cp /path/to/Dockerfile ~/dockerfile # 把写好的Dockerfile 复制到~/dockerfile文件夹下
cd ~/dockerfile
docker build -t imgae_name:image_version .
通过这个例子可以看出,Dockerfile实际上是结合了 面向对象思想 和 shell脚本 的思想,把类的继承和一连串命令行操作串起来,实现自动化创建虚拟开发环境。
另外:继承自nvidia/cuda官方的image比较规范,干净,环境默认encoding就是utf-8,建议继承自官方镜像(ubuntu、nvidia等),然后自己再安装一些需要的软件/库。
补充:
image.png
对根据上图对docker的原理举一个例子来说明:
infrastructure: 1机8卡 NVIDIA-driver=384.130
host OS: ubuntu 14.04
docker 权限:root
image.png
image.png
此时,cuda toolkit 最多安装到8.0,因为cuda toolkit 9.0没有针对ubuntu14.04的版本,虽然cuda driver 384.130 可以支持cuda toolkit 9.0
这时,docker的巧妙之处就体现出来了,可以创建一个包含ubuntu 16.04的image,这样就可以安装cuda toolkit 9.0 版本了。
因为docker 可以创建一个包含不同的操作系统的镜像,这个和虚拟机的意味就有点接近了。
参考:
NVIDIA/CUDA官方说明:https://github.com/NVIDIA/nvidia-docker/wiki/CUDA
非常简洁的一个Dockerfile编写说明:https://blog.csdn.net/yageeart/article/details/51547919
网友评论