Pycharm是支持Docker的,我们可以使用Dockers容器来调试我们的程序,当然,如果我们采用Docker调试的话就需要忍受一下Docker的一些缺点。从我的使用情况来看,Docker有以下缺点:
1、 需要重复构建Image:当我们每增加一个Python依赖包时,我们就需要重构一次我们的Image,这需要我们对Docker有一定的了解。
2、 启动/停止速度慢:主要是Container的启动占用了时间,我们的程序真正启动的时间只比平常多了大概20%。
3、 Container的重构:该操作是由Pycharm在自动完成的,我们知道Docker是会在每次未指定name创建Container时是会给我们一个名字的。显然Pycharm是记录了这个名字的,但Pycharm会在“程序/Image/系统状态”发生了更改后,比如我们重启了、我们给我们的程序添加了一个.py文件,这种情况下Pycharm就会重构我们的Containers,而且不会删除原来的。(虽然我们不必在意这些,多了就手动全部删除就行,但看着不爽----处女座慎看)
请不要用Docker或马上使用,关键在于你确定你的Image包含了你想要的。
以上就是我总结的Docker的缺点。
当然,我想Docker在生产中更多的是用在不影响现有生产环境的背景下。
由于我是在Windows下,我采用的是Docker Toolbox环境,因为我还要用Vmware和Virtualbox,所谓的“原生”Docker会打开Hyper-V,相信玩虚拟机的朋友对它深恶痛绝。而且所谓的原生Docker其实也是在Hyper-V中建立一个基于Debian的Docker虚拟机。
但DaoIO上说不要用Docker Toolbox,我是赞成的。
正式开始:
一、我们去Docker官网下载DockerToolbox,然后下一步下一步的安装就可以了
二、看下我们的Docker虚拟机
Docker Toolbox是利用virtualbox帮助我们创建了一个名叫default的基于debian的虚拟机,并且帮我们做了一些处理。我们可以修改内存,修改CPU分配数量。(这些在所谓的Windows原生Docker中是无法做到的,只有2G内存,1核,无法更改)
我们需要关注的地方 :Docker Toolbox 默认将Users文件夹按照virtualbox的共享方式共享给了Docker虚拟机,也就是说我们的工程其实必须在Users目录下,否则的话是找不到的。
显式的虚拟机”,你需要自己处理很多 问题
三、使用QuickStart或直接在Virtualbox里启动我们的Docker
。。。此处省略一万行
。。。此处省略两万行
(不会就去看文档去)
如果是初次使用,需要到修改下我们的加速器,我们可不想忍受那50K的小水管。具体方法参见Daocloud(免费的)
https://www.daocloud.io/mirror#accelerator-doc
然后我们先pull一个镜像下来
docker pull ubuntu
我一般都采用ubuntu原始image来生成我想到的镜像
四、初始化我们的Image
。。。此处省略一万行
。。。此处省略两万行
我已经做好一个用于Django的Image,基于Ubuntu的
五、创建Pycharm到Docker的连接
打开Pycharm的Interpreter,添加我们的Docker Interpreter
Pycharm会自动配置的,等待我们的只是OK
如果你需要多个,那就按照这种方法去创建多个基于不同Image的Interpreter就行,Pycharm一个Interpreter对应一个Docker Image
六、创建我们的工程
现在我们来创建一个工程 ,还以Django为例(因为Pycharm支持的很好),如前面所说,我们的工程必须创建在Users目录下,否则的话会找不到,用pycharm默认目录就行。
我们需要注意的是,当我们在创建工程时就采用Docker 的Interpreter,会出现如上上图所出现的错误,提示我们这个Interpreter不支持远程创建工程。没关系,我们先换成本地的Interpreter,先把工程创建起来,然后再修改。
七、修改Interpreter
现在我们来把Local Interpreter修改成Docker Interpreter
当你换好以后,Pycharm的右下角会做它该做的事,等待它,而不是停止它。
八、Debug我们的工程
当然,我们现在点击http://127.0.0.1:8000是无法连接到的,因为我们还没有做端口映射
九、端口映射
Docker内部映射,将我们的程序映射到Docker虚拟机的IP上(默认是192.168.99.100),我们需要修改我们的debug配置
(某些Django版本需要设置allow_hosts)
这时候程序已经可以从192.168.99.100:8000端口上访问了,你点击0.0.0.0:8000时pycharm会帮你自动跳转到192.168.99.100:8000地址上的,很牛X,有懂的亲可以告诉我介是个什么原理。
关于这个条目叫“端口映射”,其实还是有点问题的,我们知道Pycharm是支持Django和Flask的,所以对Django的端口映射能自动建立,我们只需要修改下监听IP即可
但对于我现在用到pecan来说,需要做端口映射。下一篇我以pecan为例,为大家介绍一下pycharm+docker的一些用法
写在后面:倒腾了两个晚上,终于写出来了,今天贴出来,原创不易,如有错别字,还情多夕泡函。。。。