[docker]的使用

1 docker的安装

首先普及一下基本概念:docker是一个系统镜像管理器,可以使用docker pull来下载网上已经打包好的特定环境的系统,这种系统称为image,将image拉下来之后,使用docker run进行运行,运行的系统实例称为容器(container)。因为docker可以封装任意环境的系统镜像,所以避免了复杂的环境配置,学习一些基本的docker命令可以使用我们做实验搭建环境事半功倍。
一些image需要nvidia-docker来pull,但nvidia-docker通用性差,所以我们使用需要改为官方docker。
官方docker安装参考地址
官方docker安装后,使用先前需要配置环境,nvidia-docker替换为官方docker

export CUDA_SO=$(\ls /usr/lib/x86_64-linux-gnu/libcuda.* | xargs -I{} echo '-v {}:{}')
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')

2 docker的使用

2.1 docker常用命令

pull系统镜像到本地

//下载theano系统镜像
docker pull kaixhin/cuda-theano:7.5
//下载tensorflow系统镜像
docker pull tensorflow/tensorflow:latest-gpu

创建一个名为theano的容器,将其文件系统中/work与本机中的’pwd’/theano目录进行关联,8000-9000作为对外开放的端口(尽量少占用点端口),参考

docker run --name xxx-theano -v `pwd`/theano:/work -w /work -itd -p 8000-9000:8000-9000 $CUDA_SO $DEVICES kaixhin/cuda-theano:7.5 bash

查看本地镜像与运行的容器

docker images    // watch installed image 
docker ps -a     // watch image instances in docker

创建容器实例之后,还需要将容器与本地bash关联才能进入容器,如下

//将bash与theano容器进行attach,并运行该bash
docker exec –it theano bash   

删除本地镜像或运行的容器

docker rm –vf theano    //删除名为theano的容器 
docker rm images_name   //删除名为imags_name的容器

2.2 局域网内用户直接登录docker中某容器

docker中安装ssh:

sudo apt-get install openssh-server

运行ssh/sshd或者用绝对路径( 有可能在/var/run/ssh中没有的话自己创建 )运行sshd
修改/etc/ssh/sshd_config,修改以下部分

port: 9020  //这个端口是运行docker run的时候留下的端口
Permitrootlogin:    yes

再启动ssh

sudo service ssh start  //启动ssh-server

之后就可以在xterm或者xshell中登录了,注意端口要设置为sshd_config中留的端口号,如9020。
如果要使用户同时具有sudo权限

sudo usermod –aG sudo username

3.1 使用过程遇到的问题

(1) error: docker: Network timed out while trying to connect to xxx/images
You may want to check your internet connection or if you are behind a proxy.
solution:
sudo vim /etc/default/docker
a.在文件下方加入代理,因为默认为国外image源
b.加入DNS域名,具体域名内容参见windows系统中“ipv4 dns server”中的IP

DOCKER_OPTS="--dns 10.248.2.5 --dns 10.239.27.228 --dns 172.17.6.9"

c. 在本地docker server中添加自己为用户

sudo usermod -aG docker $USER

(2) error: Tag latest not found in repository docker.io/kaixhin/cuda-theano
因为tag中没有latest的名字,所以指名我们要安装的具体版本:

docker pull kaixhin/cuda-theano:7.5   

参考

(3) error: docker: unauthorized: authentication required
image pull 到一半时会提示该信息,然后以失败告终
solution:
查看系统时间信息时否正确,如果不正确在图形化界面中修改为当前时间

date

(4) error: cannot import name raise_from when python import theano

solution: pip --proxy http://child-prc.intel.com:913 install -U six

(5) 宿主机关机后
如果宿主机关机重启后,会发现docker ps –a中没有运行的容器,这时需要

docker start container  

但有时候这句命令会报错:
dev/nvidia-uvm-tools: no such file or directory
Error: failed to start containers: caffe
解决

cd  /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo ./deviceQuery
    原文作者:fariver
    原文地址: https://www.cnblogs.com/fariver/p/7185942.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞