一、背景
思考:
在一个项目的部署阶段,往往需要部署到云服务器或者是终端设备上,而环境的搭建往往是最费时间和精力的,特别是需要保证运行环境一致性,有什么办法可以批量部署相同环境呢?
Docker本质——打包环境;
将本机的环境和代码一同打包在docker环境中,生成一个容器,可以部署到任何服务器和机器下,节省了环境安装的精力并确保了环境的一致性;
二、window安装docker
Window建议安装docker toolbox,因为window家庭版安装docker for window可能会出现不适配情况;
下载地址:https://github.com/docker-archive/toolbox/releases
(多个版本,选择一个版本即可,下载exe版本)
安装过程就是无脑安装即可,默认安装在C盘,安装后会出现两个程序,一般使用第一个程序;
打开Docker Quickstart Terminal,默认会下载一个最新的镜像,由于网络问题会出现以下问题:
这里手动复制下载的地址,在浏览器中下载后放在C:\Users\用户名\ .docker\machine\cache下:
重新运行一遍,短暂初始化后出现以下界面,即代表Docker安装成功:
接下来就可以实际使用docker来安装一个环境了;
三、配置阿里云加速器
官方容器下载地址:https://hub.docker.com/
官方下载存在一个问题,就是下载速度不够快,这里需要配置以下阿里云加速器;
步骤:
1、登录阿里云平台,找到镜像加速器选项;
网站地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、在Docker中配置,执行以下命令:
1.docker-machine ssh default
2.sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror= 加速器地址|g" /var/lib/boot2docker/profile
3.exit
4.docker-machine restart default
在cmd命令行下执行docker info,如出现下面信息表示加速成功;
四、下载pytorch镜像
首先在官方hub里面找需要安装的镜像名称;
https://hub.docker.com/r/pytorch/pytorch
这里复制右边的命令到本地docker启动窗口即可,安装完毕后查看docker images即可看到;
启动该镜像:
docker run -it pytorch/pytorch
这里可以看出,该镜像自带的系统还是ubuntu,并且已经预装好了python3.7,当然这是一个极简环境,也就是说很多要用的包是没有的,需要自己安装;
比如要安装一个opencv的话,最好用上阿里源进行安装,这样安装速度是最快的;
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
这里镜像已经成功安装了,下面可以跑一个简单的分类案例试试;
五、docker中run一个分类案例
首先需要将本地的项目copy到容器中,在拷贝地址下打开git;
后面这一串是容器id和需要拷贝到的文件夹地址(默认会创建)
安装缺少的一些包后,运行一下程序看看能否成功;
这里我们是通过服务部署的方式运行一个模型,所以会看到服务开启的界面:
但是我们需要打开另一个docker窗口开执行程序,这里就需要用到新的命令了;
docker exec -it id /bin/bash
可以看出我们成功请求并且得到返回结果,到这里可以开始自由的在docker跑自己的程序了,缺什么就安装什么即可!
六、上传自己的docker环境
在阿里云容器管理界面创建一个新的仓库;
点击管理会有一些操作命令指示,根据步骤在本机执行即可;
1、登录阿里云Docker Registry
docker login --username= registry.cn-hangzhou.aliyuncs.com
2、将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/..../pytorch:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/.../pytorch:[镜像版本号]
这里显示已经正在上传中,镜像文件比较大,需要的时间比较长;
七、Docker的一些进阶操作
在使用Jeston jx1开发版时候,使用docker配置GPU环境需要操作复杂一些,这里简单讲述下;
首先就是将本机的Nvidia环境映射到docker容器中;
docker run --runtime nvidia -it 【容器id】 /bin/bash
这里runtime超参数可以将本机的CUDA的环境,一些动态库直接映射到容器中去,在使用的时候也遇到一些问题,就是映射并没有完全成功,其原因找了很久,最后在ubuntu下重新安装一遍nvidia-docker这个包解决了,遇到问题的可以试试,这时候容器中的nvcc版本就是和本机一致的;
下一步就是将本机的一些数据或模型映射到容器中,虽然也可以用docker cp命令将文件copy到容器中,但如果大的数据集这个时间会花费很长,采用映射的方式是最方便快捷的,并且生成的新的图像也可以在本机上直接访问,不需要来回传输;
docker run -it --rm --runtime nvidia -v 【容器文件路径】:/【本机文件路径】 【容器ID】 /bin/bash
还有一些进阶使用,比如如何在docker中使用摄像头,如何在docker运行带图形化的界面程序,在这里就不具体讲解了,如果有需要的可以查阅一下文档;
总结
本篇Docker入门文章并没有具体讲解Docker的一些底层原理,而是从实际使用的角度出发,用一个图像分类的案例讲述了如何拉取镜像并使用,如何上传自己的镜像供他人使用;
如果有一些问题或者想法的话欢迎私信探讨!
最后放最爱的小企鹅!