利用docker除錯OpenStack服務

2021-09-14 08:40:13 字數 2031 閱讀 2882

從工作開始就一直做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。

dock目前支援windows,mac os和linux。其中windows server2016和linux都支援native模式。windows 10和mac os只能靠虛擬機器裡面的docker模式支援。以下是安裝方法:

製作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
docker run -it -v /your_neutron/repo:/neutron/ -v /your_neutron_confs:/confs/ -p 9696:9696 --hostname server --name neutron_server neutron:lastest bash
進入容器後,我們先用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裡面做即可,修改**後,想除錯,直接將容器的服務重啟下就可以了。

除錯Docker容器

本文講的是除錯docker容器,編者的話 本講述了cloud66在解決容器無法啟動時的兩種解決方案,對於沒有自動除錯技術的我們,優先推薦手動除錯方案。最近,我看到很多人都開始在生產環境中使用docker。同樣,我們也在幫助我們的客戶使用docker,雖然整個過程挑戰頗多,但這種挑戰是最令人激動和神往...

docker的容器除錯

docker的除錯和虛擬機器操作 1 如何給給docker新增加速器 a 執行一下命令 mkdir etc docker echo etc docker daemon.json 重啟docker systemctl restart docker 或者 etc init.d docker restar...

利用GDB除錯CORE檔案

什麼是core dump core dump又叫核心轉儲,當程式執行過程中發生異常,程式異常退出時,由作業系統把程式當前的記憶體狀況儲存在乙個core檔案中,叫core dump。linux中如果記憶體越界會收到sigsegv訊號,然後就會core dump 在程式執行的過程中,有的時候我們會遇到s...