资讯专栏INFORMATION COLUMN

利用docker调试OpenStack服务

ysl_unh / 701人阅读

摘要:而且恰巧接触到了强大的,所以经过不断的摸索,我最终能够利用非常方便对自己的代码进行调试。但是其他的组件应该也是适用,特别是除外与不依赖于特定环境的组件。安装目前支持,和。我们暂且先用后者做一个自己的镜像,并以调试为例。

背景

从工作开始就一直做openstack的开发,期间经历了做私有云的开发,到现在在做公有云网络控制器的开发。开发调试的时候,最让我头疼的是不是调试代码和找bug。而是将自己改动的OpenStack部署到测试环境进行测试,哪怕是一个简单的业务逻辑修改。基本上60%以上的时间都花在了部署环境上。由于后面要开发的业务逻辑实在太多,时间太短。而且恰巧接触到了强大的docker,所以经过不断的摸索,我最终能够利用docker非常方便对自己的Neutron代码进行调试。方便到什么程度?只要不与数据传输层相关,neutron业务代码的调试就如本地调试python脚本一样。再也不需要部署任何环境,甚至都不需要安装。由于我现在只做OpenStack neutron的开发,以下的介绍都基于neutron。但是其他的OpenStack组件应该也是适用,特别是除nova外与不依赖于特定环境的组件。

基本思路

利用docker的共享volume将自己的neutron代码库映射到容器里面,在容器内部再将这些代码软连接到python的dist-packages里面。如果这一步软连接都想省掉,则可以将本地代码库直接映射到容器的dist-packages里面。由于容器内的代码与本地主机是共享的,所以本地的修改可以自动应用容器里面。这意味着,你用pycharm修改了neutron的一个业务逻辑,只要在容器里将对应的neutron服务重启即可。

开发环境

目前我的开发环境是基于mac os,开发工具是pycharm。但是本套调试方案也可以基于windows和linux。

安装docker

Dock目前支持windows,mac os和linux。其中windows server2016和linux都支持native模式。windows 10和mac os只能靠虚拟机里面的docker模式支持。以下是安装方法:

Docker for Mac (macOS)

Docker for Windows (Microsoft Windows 10)

Ubuntu

CentOS

Windows native

注:windows的命令行是cmd,为了方便使用,建议下载一个方便的命令行工具,比如babun。

制作镜像

制作docker镜像可以通过dockerfile,也可以使用base镜像自己根据需要安装好必要的工具后,再commit成一个新的镜像。我们暂且先用后者做一个自己的镜像,并以调试neutron为例。

下载镜像

docker pull ubuntu:latest

运行容器

docker run -it -v /your_neutron_repo:/neutron ubuntu:latest bash

安装必要的软件
运行容器后,我们安装一些必要的软件.比如pip,git,telnet等等你后面觉得你会在debug code用的上的一些工具。但是最重要的是要把neutron的依赖包给装上。

cd /neutron;pip install -r requirements

保存镜像

docker commit container_id neutron:latest
在容器里运行neutron-server 启动容器
docker run -it -v /your_neutron/repo:/neutron/ -v /your_neutron_confs:/confs/ -p 9696:9696 --hostname server --name neutron_server neutron:lastest bash

-v选项是docker volume共享功能,可以将本地的文件夹映射到容器内部,前面本地文件夹,后面是容器内部的路径.”your_neutron_confs"是neutron的配置文件(neutron库里的etc/*.conf文件和*.ini文件),包含了mq的连接信息,mysql的连接信息等。之所把这个映射进去是为了方便在外面修改这些配置文件,并将这些配置文件共享给其他的容器(比如dhcp-agent),

-p选项是docker的端口映射功能,由于neutron的api使用的9696端口,所以我们必须把容器内部的9696端口映射出来。和-v一样,前面的port是本地的port,后面的port是容器内部的port

--hostname是指定容器的honstname

--name是指定容器的名称

配置

进入容器后,我们先用install一下neutron的代码,这样的话可以在bin下生成neutron-server等可执行文件。

cd /neutron;python setup.py install

删除dist-packages下面的neutron代码,并做好软连接:

rm -rf /usr/local/lib/python2.7/dist-packages/neutron
ln -s /neutron/neutron /usr/local/lib/python2.7/dist-packages/neutron
启动服务

上面的都完成后就可以启动neutron-server了。

neutron-server --config-file /confs/neutron.conf

至此,neutron-server就已经起来了。而你的代码修改只是在本地的pycharm里面做即可,修改代码后,想调试,直接将容器的服务重启下就可以了。

Tips

每次用完容器,可以不用删除容器,下次直接start,再attach即可。这样速度快,而且不用重新开启容器。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27043.html

相关文章

  • OpenStack 与 Rancher 融合的新玩法

    摘要:本次分享给大家带来与能够融合使用的一些玩法。计算节点的进程不能在运行在中。部署的过程需要拉取很多镜像,需要耐心的等待。之前的计划应该是在版会添加的支持,差不多就是今年月份左右。 OpenStack是开源Iaas云的事实标准,功能大而全,除了能管理虚机同时也能管理容器,OpenStack项目中的Magnum、Kuryr、Kolla、Murano、Nova-docker等都是与容器场景很不...

    android_c 评论0 收藏0
  • 虚拟化实践

    摘要:本文并非虚拟化的科普文章,主要将我们在私有云实践过程中的一些思想和遇到的问题拿出来跟大家讨论分享。我们虚拟化实践包含了传统的基于协议的以及目前流行的。 引言 这里的虚拟化等于私有云。本文并非虚拟化的科普文章,主要将我们在私有云实践过程中的一些思想和遇到的问题拿出来跟大家讨论分享。我们虚拟化实践包含了传统的基于libvirt协议的KVM以及目前流行的docker。 为什么要虚拟化 虚拟化...

    newsning 评论0 收藏0
  • OpenStackDocker不能,ServerLess能决定云计算胜负吗?

    摘要:彼时,从虚拟化管理到公有云,热闹异常。虽然年才明显放弃公有云的全面竞争,但在年决定发起和开源项目是,不说明确,至少已经隐隐觉得肯定搞不过亚马逊了。年前卖的多火,被视为虚拟主机的升级版。当然不是新堆栈,而是传统堆栈。 还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值460亿美元的Saa...

    gitmilk 评论0 收藏0
  • 明与暗角力!开源云平台中的拼图“玩具”

    摘要:开源云平台中的拼图玩具对于云平台,如今基本就意味着开源。明与暗角力开源云平台中的拼图玩具为什么会产生这种混淆正如之前谈到由两大部分组成和的计算引擎。 开源云平台中的拼图玩具 对于云平台,如今基本就意味着开源。提及开源技术,着实在云计算和大数据下火起来。面对扑面而来的云服务,无论是何种服务对于企业和用户来说都是熟悉的陌生人,熟悉是因为知道云计算的人都能说出IaaS、PaaS和SaaS这几个词,...

    1treeS 评论0 收藏0

发表评论

0条评论

ysl_unh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<