Docker使用

Author Avatar
cooscao 5月 13, 2018

Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。按理说,Docker并不是专门用于深度学习的工具,它运用非常广泛,对于任何编程的项目,Docker都能提供很好的帮助。

在实验室中需要使用Docker的原因主要是为了

防止在服务器中相互影响和破坏底层环境,从而使用Docker为每个人生成一个虚拟的单独的环境

这是相当有用的,对于每个生产环境,都可以生产一个单独的容器, 同时与其他生产环境相隔离。这和虚拟机似乎有点类似,但相比较于虚拟机,Docker所生成的容器具有更快速,更轻量 的效果。在Docker中有两个很重要的概念

  • 容器(container),其对应于面向对象方法中的对象
  • 镜像(image), 其对应于面向对象方法中的

所以使用Docker的过程通常为:

  1. 自己或者找到一个别人配好的适合自己生产环境的镜像。通常自己配镜像是通过DockerFile文件
列出本机的所有 image 文件。

$ docker images

删除 image 文件

$ docker image rm [imageName]

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

# pull 命令从官网抓取hello-world镜像
$ docker image pull library/hello-world
  1. 利用得到的image文件,生成容器实例
$ docker container run hello-world

在docker中最常用的就是docker run命令,也是最重要的。这里就用实验室所用的docker run命令展现其每个参数的意义

$ docker run -p 7981:8888 -it --name=[容器名称] -v /home/cao/workspace:/root/workspace --device /dev/nvidia-uvm --device /dev/nvidia0 --device /dev/nvidia1 [镜像名称] /bin/bash
  • -p : 端口映射,即容器的8888端口映射到本机的7981端口
  • -it : 表示进入容器之后,进入命令行交互模式
  • —name : 指定生成容器的名称,一定要指定
  • -v : 路径映射,即容器的/root/workspace, 与本机的/home/cao/workspace 相互挂载,所以不能轻易删除
  • —device : 映射本机的指定显卡

这样在生成一个容器之后,通常就只需要对此容器进行操作,而生产环境全由docker attach [容器名称]进入容器之中操作。使用docker -h可查看全部帮助。