Docker
关于docker的基本概念和一些基本使用情况,可以参考GitHub上的这些文章。但是上面有些操作还是太文章话,没有很好的举例子说明,所以对于刚入门的爱好者理解起来有些困难。关于docker的安装,网上有太多的例子,这里就不在叙述。
首先由一个名为openvino的框架部署来讲起--openvino,它是因特尔,对,就是制造CPU公司的那家,提供部署机器学习的一个框架,它把caffe,TensorFlow等流行的机器学习框架训练出来的模型,转换为自己框架可以识别的模型,然后提供推理预测过程。总之,就是转换模型和推理阶段的应用。这样因特尔inter可以利用自家的CPU或者GPU对训练出来的模型进行优化运行,速度上比直接利用TensorFlow、caffe等框架跑在CPU上要快一些。
这里就是利用docker部署的openvino框架,首先下载代码:
git clone https://github.com/misnowman/openvino.git
进入到下载后openvino的文件夹下发现就两个文件:demo.sh和Dockerfile。
可以把Dockerfile看成一个制作docker镜像的一个脚本文件。有点类似cmake。
cd openvino
docker build .
然后,关于openvino的docker镜像文件就制作完成了。
如果想要详细的了解openvino,请看官网。
另外,网上有很多已经制作出来相关的镜像文件,可以通过docker进行搜索的,通过docker run进行运行时,如果本地找不到就会网上下载。比如说:
sudo docker search openvino
会出现:
选择一个直接运行(docker run ....)即可。
镜像和容器
可以这么理解镜像(Image)和容器(container)的关系:容器是镜像的一个实例。这句话是不是在学习面向对象类语言很容易听到的一句话。我们可以想象成:人,是一个抽象的类,那么小明,小红这个有血有肉的实物,即是人的一个实例。制作了镜像文件,就可以实例出来很多很多容器,容器的初试状态都是一样的。实例出来一个容器,就可以对该容器里面部署好的东西进行操作或者添加了。
我们已经制作出来一个镜像了(openvino),那么如何查看我们只做的镜像呢?命令行键入
docker images
可以看到:
我已经安装了四个镜像文件了,而第一个是刚刚安装的那个openvino框架的镜像。并且想当尴尬的是居然没有名字,只有IMAGE_ID,还好的是,我们创建一个镜像的实例--容器也可以用IMAGE-ID.
sudo docker run -i -t f15f452e3eef /bin/bash
// sudo docker run -it ubuntu /bin/bash
第二个,让我杠掉的是上图中第三个名为Ubuntu的镜像文件。-i,-t,或者合并起来-it的意思是
-
docker run:启动container
-
ubuntu:你想要启动的image
-
-t:进入终端
-
-i:获得一个交互式的连接,通过获取container的输入
-
/bin/bash:在container中启动一个bash shell(就是命令行交互)
生成了容器,这个就是一个独立的环境了,然后就可以在这个独立环境中进行相关操作。
常用命令
在另起一个命令行窗口,通过一些命令,我们可以查看或操作电脑中的容器和镜像操作
docker ps
列出正在运行中的容器。
docker ps -a
列出创建后并存在的所有容器。包括正在前台运行,后台退出等等。
docker rm XXX
删除容器,xxx表示容器名称或者其ID。通过docker ps -a 等操作可以获得。
docker rmi XXX
删除镜像,XXX 代表着镜像的名字或者ID。通过docker images命令可以获得镜像的信息。但是删除前必须删除有镜像实例化出来的容器,否则会爆出如下类似错误:
Error response from daemon: conflict: unable to delete 7698f282e524 (cannot be forced) - image has dependent child images
所以,我们要先找到由该镜像生成的所有容器,删除所有容器后才能顺利删除其镜像。
docker commit [container id] [image]
保存对容器的修改。我们在run后,由镜像实例化了一个容器A,在容器A中做了一些配置或者对部署的服务进行了升级,如果没有commit,那么下次再次run Image并生成容器B的时候,该容器B仍然是初始化配置。那么通过commit命令后,再次run 镜像时,生成的原始环境就是升级后的配置了。但是制作镜像文件时尽量不要这么做,原因可参考这篇文章
image 你可以自己设置名称号,并不一定是容器的抽象镜像文件名,比如新名字可以为:currentImage:V10.10.10。:后面表示的是tag。
docker stop container name /container id]
停止docker容器的服务
docker start [container name /container id]
启动容器,只是启动了,你会发现还无法和该容器进行交互。
docker attach [container name /container id]
弹出容器交互窗口(或者说进入了容器环境)
docker exec -i -t [container name/container id] /bin/bash
同样是对开启的容器进行交互操作,但是和attach命令的区别是,exec类似于ssh和远程Linux server交互。因此在退出容器的时候,attach可以使用control+d或者命令行键入exit方式,而exec只能用exit。
docker inspect -f '{{.Id}}' [container name/container id]
获取容器的ID全称([container full ID])
docker inspect [container name/container id]
获取从起的详细信息
docker cp 本机文件路径 ID全称:容器中的文件路径
从本机文件传输到容器。
docker cp ID全称:容器中的文件路径 本机文件路径
从容器文件到本机的传输
docker可以类似git一样提交到GitHub
可以参考该博客
conda
安装:
conda可以安装两个版本:anaconda和miniconda,前者包含了一些常用的包,后则为精简版,需要什么就要装什么.但是所谓的常用是一个模糊概念,上面的常用并不带着自己也常用,因此这里使用miniconda.
下载:
#linux
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
# mac
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
使用lastest,即最新版的conda也是随着python的版本更新而更新的.
安装:
chmod 777 Miniconda3-latest-Linux-x86_64.sh #给执行权限
bash Miniconda3-latest-Linux-x86_64.sh #运行
防止conda污染原来的环境,污染后会把原来设置好的东西进行更改,因此在conda加入环境变量的时候选择no,即在安装的时候碰到此语句选择no:
....
installation finished.
Do you wish the installer to prepend the Miniconda3 install location to PATH in your '.....'.bashrc ? [yes|no]
[no] >>> no
# 这里选择no
此时conda命令仍然不可用,此时从你电脑的home路径下进入miniconda3的bin下,将里面的activate文件改变一下权限:
chmod 777 activate
在该目录下启动conda
. ./activate
#这里的第一个点跟source是一样的效果。
此时命令窗口会有base字样.这时候输入conda list就会带有的基础包.
接下来,需要为conda添加channel,这里的作用好比是,以后你下载工具包的时候,需要向channel里面找.官方添加的方式为:
conda config --add channels bioconda
conda config --add channels conda-forge
但是官方有可能速度会慢,添加国内的镜像点有可能会改善,这里是清华的
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
北大的:
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/r/
显示已经添加的channel:
# 显示安装的
conda config --set show_channel_urls yes
conda config --get channels
# 查看添加的channel
vim ~/.condarc
常用命令
环境相关
conda的目的就是各自的环境独立.因此我们想要使用就必须先创建环境,安装好以后激活的是base环境.
# 创建新的环境,-n 为环境名字.后面跟的是python版本. 添加-y参数可以跳过安装的确认过程
conda create -n my_env python=3.8
或者
conda create --name my_env python=3.8
# 进入环境
conda activate my_env
# 退出当前环境
conda deactivate
#删除环境
conda remove -n my_env --all
# 重命名,分为两步,1:就环境被克隆到创建的新环境,2:删除旧环境
conda create -n new_env --clone old_env
conda remove -n old_env --all
环境工具包管理:
# 当前环境下的已经安装工具包
conda list
# 查看某个具体环境
conda list -n xxx
# 在当前环境安装工具包:
# 以指定安装tensorflow的1.14版本为例子
conda install tensorflow-gpu==1.14
# 有的制定版本没有,需要查看channel内有那些版本:
conda search tensorflow
# 有些工具包conda没有,但是可以通过pip进行安装,在当前环境进行pip安装,即安装到当前环境,并不是系统环境.例如
pip install tensorflow-gpu==1.14
# 删除某个工具包同样:
conda uninstall tensorflow
conda remove tensorflow
# 删除某个环境下的工具包
conda remove -n xxx tensorflow
conda信息
#可以通过下列三个命令任何一个查看已经创建的环境列表
conda env list
conda info --env
conda info -e
查看当前conda的版本信息
conda -V 或 conda --version
其他
每次进入终端terminal时会自动进入base环境,可以通过
conda config --set auto_activate_base false
来进行设置.
如果想要每次进入base环境,则可以把上面命令行中的false改成true.