深度学习

docker的基本概念和Nvidia-docker镜像

2018-02-22  本文已影响9935人  嗮太阳的狗狗

本文主要介绍docker的基本概念和原理,分为:

1.docker是什么

2.docker架构

3.docker基本操作

4.Nvidia-docker镜像

1.什么是docker?

Docker 是一个开源的应用容器引擎,基于 GO语言并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,可以实现虚拟化。

Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。并且传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

这里可以将容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间可以建立通信机制。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少

应用场景:

Web 应用的自动化打包和发布。

自动化测试和持续集成、发布。

在服务型环境中部署和调整数据库或其他的后台应用

。。。

优点:

简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。

快速部署:

Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比、消息队列等等都可以打包成一个镜像部署。 

节省开支:

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

2.docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器;

Docker 容器通过 Docker 镜像来创建;

这里容器与镜像的关系类似于面向对象编程中的对象与类的关系;

docker简单架构图如下:

docker架构一些概念介绍:

3.docker 基本操作

http://www.runoob.com/docker/docker-command-manual.html

4.模型训练和评价系统中docker的安装和使用

a.docker安装

安装官方docker

sudo apt-get -y install apt-transport-https ca-certificates curl  

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -    

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update

sudo apt-get -y install docker-ce

b.安装nvidia-docker

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containersdocker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f

sudo apt-get purge -y nvidia-docker# Add the package repositoriescurl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update# Install nvidia-docker2 and reload the Docker daemon configurationsudo apt-get install -y nvidia-docker2

sudo pkill -SIGHUP dockerd

c. 安装ubuntu,配置caffe所需环境

sudo nvidia-docker search ubuntu

sudo nvidia-docker pull ubuntu

配置caffe所需环境

.....

注意:镜像中的显卡驱动需要与宿主机镜像驱动一致

到此,镜像安装完成,但是存在一个问题,有些模型运行需要指定运行环境,如果直接在容器中修改系统配置文件的话,就不能使用脚本运行程序,只能使用命令,因此需要在打包镜像的时候使用dockerfile指定需要的环境变量

d.使用dockerfile生成镜像

生成镜像的两种方法:dockerfile创建和手动创建

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像,类似于makefile

具体参考各种命令

https://www.cnblogs.com/boshen-hzb/p/6400272.html

本文使用的dockerfile文件如下:

FROM laika/ubuntu:base_image

LABEL maintainer 'wanghq'

ENV PYTHONPATH=‘/install_src/pyfaster-rcnn/python’

运行:sudo docker build -t "ubuntu:V1"

e.启动容器

sudo nvidia-docker run -it--privileged=true--name=wanghq ubuntu:V1 /bin/bash

注意:此处必须添加--privileged=true使得容器真正获取主机硬件资源,包括GPU显卡资源

上一篇下一篇

猜你喜欢

热点阅读