摘要:而且恰巧接觸到了強大的,所以經過不斷的摸索,我最終能夠利用非常方便對自己的代碼進行調試。但是其他的組件應該也是適用,特別是除外與不依賴于特定環境的組件。安裝目前支持,和。我們暫且先用后者做一個自己的鏡像,并以調試為例。
背景
從工作開始就一直做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。
安裝dockerDock目前支持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即可。這樣速度快,而且不用重新開啟容器。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27043.html
摘要:本次分享給大家帶來與能夠融合使用的一些玩法。計算節點的進程不能在運行在中。部署的過程需要拉取很多鏡像,需要耐心的等待。之前的計劃應該是在版會添加的支持,差不多就是今年月份左右。 OpenStack是開源Iaas云的事實標準,功能大而全,除了能管理虛機同時也能管理容器,OpenStack項目中的Magnum、Kuryr、Kolla、Murano、Nova-docker等都是與容器場景很不...
摘要:彼時,從虛擬化管理到公有云,熱鬧異常。雖然年才明顯放棄公有云的全面競爭,但在年決定發起和開源項目是,不說明確,至少已經隱隱覺得肯定搞不過亞馬遜了。年前賣的多火,被視為虛擬主機的升級版。當然不是新堆棧,而是傳統堆棧。 還記得在十多年前,SaaS鼻祖SalesForce喊出的口號『No Software』嗎?SalesForce在這個口號聲中開創了SaaS行業,并成為當今市值460億美元的Saa...
摘要:開源云平臺中的拼圖玩具對于云平臺,如今基本就意味著開源。明與暗角力開源云平臺中的拼圖玩具為什么會產生這種混淆正如之前談到由兩大部分組成和的計算引擎。 開源云平臺中的拼圖玩具?對于云平臺,如今基本就意味著開源。提及開源技術,著實在云計算和大數據下火起來。面對撲面而來的云服務,無論是何種服務對于企業和用戶來說都是熟悉的陌生人,熟悉是因為知道云計算的人都能說出IaaS、PaaS和SaaS這幾個詞,...
閱讀 1865·2019-08-30 15:53
閱讀 3193·2019-08-30 15:44
閱讀 2806·2019-08-26 13:31
閱讀 1949·2019-08-26 12:10
閱讀 792·2019-08-26 11:01
閱讀 2120·2019-08-23 15:32
閱讀 1585·2019-08-23 13:43
閱讀 2529·2019-08-23 11:58