本文主要介绍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显卡资源