利用docker調試OpenStack服務

背景

從工做開始就一直作openstack的開發,期間經歷了作私有云的開發,到如今在作公有云網絡控制器的開發。開發調試的時候,最讓我頭疼的是否是調試代碼和找bug。而是將本身改動的OpenStack部署到測試環境進行測試,哪怕是一個簡單的業務邏輯修改。基本上60%以上的時間都花在了部署環境上。因爲後面要開發的業務邏輯實在太多,時間過短。並且恰巧接觸到了強大的docker,因此通過不斷的摸索,我最終可以利用docker很是方便對本身的Neutron代碼進行調試。方便到什麼程度?只要不與數據傳輸層相關,neutron業務代碼的調試就如本地調試python腳本同樣。不再須要部署任何環境,甚至都不須要安裝。因爲我如今只作OpenStack neutron的開發,如下的介紹都基於neutron。可是其餘的OpenStack組件應該也是適用,特別是除nova外與不依賴於特定環境的組件。python

基本思路

利用docker的共享volume將本身的neutron代碼庫映射到容器裏面,在容器內部再將這些代碼軟鏈接到python的dist-packages裏面。若是這一步軟鏈接都想省掉,則能夠將本地代碼庫直接映射到容器的dist-packages裏面。因爲容器內的代碼與本地主機是共享的,因此本地的修改能夠自動應用容器裏面。這意味着,你用pycharm修改了neutron的一個業務邏輯,只要在容器裏將對應的neutron服務重啓便可。mysql

開發環境

目前個人開發環境是基於mac os,開發工具是pycharm。可是本套調試方案也能夠基於windows和linux。linux

安裝docker

Dock目前支持windows,mac os和linux。其中windows server2016和linux都支持native模式。windows 10和mac os只能靠虛擬機裏面的docker模式支持。如下是安裝方法:git

注:windows的命令行是cmd,爲了方便使用,建議下載一個方便的命令行工具,好比babun。sql

製做鏡像

製做docker鏡像能夠經過dockerfile,也可使用base鏡像本身根據須要安裝好必要的工具後,再commit成一個新的鏡像。咱們暫且先用後者作一個本身的鏡像,並以調試neutron爲例。docker

  1. 下載鏡像
docker pull ubuntu:latest
  1. 運行容器
docker run -it -v /your_neutron_repo:/neutron ubuntu:latest bash
  1. 安裝必要的軟件
    運行容器後,咱們安裝一些必要的軟件.好比pip,git,telnet等等你後面以爲你會在debug code用的上的一些工具。可是最重要的是要把neutron的依賴包給裝上。
cd /neutron;pip install -r requirements
  1. 保存鏡像
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等可執行文件。ubuntu

cd /neutron;python setup.py install

刪除dist-packages下面的neutron代碼,並作好軟鏈接:windows

rm -rf /usr/local/lib/python2.7/dist-packages/neutron
ln -s /neutron/neutron /usr/local/lib/python2.7/dist-packages/neutron

啓動服務

上面的都完成後就能夠啓動neutron-server了。centos

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

至此,neutron-server就已經起來了。而你的代碼修改只是在本地的pycharm裏面作便可,修改代碼後,想調試,直接將容器的服務重啓下就能夠了。api

Tips

  • 每次用完容器,能夠不用刪除容器,下次直接start,再attach便可。這樣速度快,並且不用從新開啓容器。
相關文章
相關標籤/搜索