docker应用部署——部署python

学习是痛苦的,但同时也是值当的。在一段时间里面你会碰到大大小小数不清的困难,这个时候唯有自己拯救自己,记住:再小的帆也能远航。

docker是一门很有用的技术,我这里只是单纯的记录一点皮毛,以便遗忘后能回忆起现在的点滴。

如何在docker里部署自己的python环境呢,这里假定你已经安装好了docker,并了解镜像(image)、容器、仓库之间的关系,则按以下步骤进行:

1.拉取镜像

首先你得查看自己的镜像是否已经存在吧,查看所有镜像:sudo docker iamge ;发现没有自己所需要的python镜像怎么办,先上hub.docker.com查询所需拉取镜像的版本号吧,或者搜索镜像:sudo docker seach 镜像名称(eg:sudo docker seach python);得到版本号后,拉取镜像:sudo docker pull 镜像名称:版本号(eg:sudo docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime);此时镜像就已经拉取成功,但是如果拉错了怎么办?删除镜像:docker rmi 镜像名称:ID(eg:sudo docker rmi redis:5.0);若一气之下想删除所有镜像怎么搞?删除所有镜像:sudo docker rmi ~~docker image~~

2.创建容器

有了所需的镜像之后就要创建容器了,以上面的python版本为例,已经拉取好了sudo docker pull pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime镜像,在该镜像基础上创建容器:sudo docker run  -it  --name=jianglin  pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime  /bin/bash,各部分什么意思呢?'-it'中的 'i' 表示一直运行,'t' 表示分配终端;‘--name=XX’ 是你想给容器取的名字;‘pytorch/pytorch:1.6.0-cuda10.1-cudnn7-runtime’指定哪个镜像,由镜像名+冒号+镜像id组成;'/bin/bash' 表示进入容器的初始化指令;当然你也可以用sudo docker -id --name=xx centOS:7(举例)来创建容器,-id 表示创建好了容器但不理解进入容器,即便退出容器容器也不会自动关闭。

容器创建好了就该配python环境了吧,其实说来容器就相当与一个虚拟机,你在虚拟机上怎么配在这也就怎么配:conda create -n open-mmlab python=3.6 → conda activate opan-mmlab → pip install XX ....

3.运行代码

好,容器建好了,环境也有了,咱是不是该跑代码了,那怎么在docker容器里运行python代码呢?首先,你得把宿主机的代码copy到docker容器里面(新打开一个终端):sudo docker cp 你的文件路径 容器id:容器路径(eg:sudo docker cd /home/zjl/code/SegFormer 50460bd33rd:/workspace),这里由几个点需要注意:①是容器id看清楚,不是镜像id;②容器路径一定要写对,你可以先在docker终端ls查看以下有哪些文件夹

现在代码也copy到容器里了,该怎么运行呢?实际上docker容器就相当于你虚拟机的终端,你在那怎么做在这也就怎么做。不过首先你得进入到你的代码目录下:cd XX(eg:cd SegFormer),在开始运行前先做一个准备工作,什么准备工作呢,就是下载vim.下载vim的目的主要是为了待会我们好具体查看代码内容,那怎么下载vim呢?如果你直接输入:apt-get install vim(或者yum install vim)可能是没有用的,这是因为你没有更新库:apt-get update,之后安装vim:apt-get install vim

现在我们可以运行代码了:python XX.py ,注意你的 .py文件一定要指定路径,你会发现代码跑不起来报错,怎么办呢,这时候只有自己耐心的去解决了,代码报错我想在容器里修改代码怎么办?还记得刚才下好的vim吗,这时候就派上用场了,在doncker容器下修改代码:vi XX.py,同理请指定你的.py文件路径。进入到.py文件后,按i进入读写模式,改好后按esc键退出,随后按shift+冒号键输入wq,回车保存。

代码开发好后,退出容器:exit ,可是回头定睛一想,有一个文件还没改或者一些不必要的文件还没删除,怎么办?先进入容器:sudo docker exec -it 容器名 /bin/bash(eg:sudo docker exec -it jianglin /bin/bash)。注意,如果你之前是以-id的方式创建的容器,那么你应该先启动容器:sudo docker start 容器名 ,再进入容器。重新进入容器后,怎么删除不必要的文件呢?先ls看一下都有哪些文件,确定好后删除文件:rm -r directory(eg:rm -r predict.py 这里可以参考这篇博客:linux终端删除文件命令)。代码倒是改了,但我怎么进入到刚才创建的open-mmlb环境下呢,好像conda activate open-mmlab也不起作用啊?重新进入到之前配好的环境:conda activate,之后再conda activate open-mmlab

4.镜像输出

代码开发完后,退出容器,保存当前容器为新的镜像:sudo docker commit  <容器ID>  <镜像名>,此时运行docker image list可以看到新生成的镜像;然后将新生成的镜像输出:sudo docker save <镜像名> >  XXX.tar(eg:sudo docker save jianglin > task6.tar)

5.经常使用的其它命令

查看所有镜像id:sudo docker images -q

查看正在运行的容器:sudo docker ps    (sudo docker ps -a 查看历史容器)

关闭容器:sudo docker stop 容器名

删除容器:sudo docker rm 容器名

查看容器信息:sudo docker inspect 容器名

查询docker命令:sudo docker XX --help

你可能感兴趣的