打造SDN容器百寶箱(二)
在2014年12月8、9號的“中國未來網絡發展與創新論壇暨全球SDN開放網絡高峰會議”上,國內道里云公司已經利用openstack+Docker技術組合,提供了跨數據中心的“小云”服務,從用戶視角提出了“租戶控制器”理念。個人認為,這體現了道里云對云和SDN的理解既務實又靈活,沒有困死在SDN的學術定義中,也沒有“累死”在打造openstack的無敵航母上。話不羅嗦了,這次主要寫如何搭建Docker私有倉庫及相關細節注意事項。
1 安裝環境
此環境搭建主要在Ubuntu14.04系統上進行:
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.1 LTS Release: 14.04 Codename: trusty
2 安裝方法及步驟
1.從github上下載docker-registry源碼
sudo git clone https://github.com/dotcloud/docker-registry
2.安裝環境依賴庫
sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev gunicorn
3.配置config
cd docker-registry/config sudo cp config_sample.yml config.yml sudo vi config.yml3. ##配置config cd docker-registry/config sudo cp config_sample.yml config.yml
修改配置文件:
$sudo vi config.yml local: &local <<: *common storage: local storage_path: _env:STORAGE_PATH:/tmp/registry
安裝Docker需為本地自定義路徑/home/dockertest/registry1mkdir /home/dockertest/registry
4.安裝docker-registry依賴
cd docker-registry sudo pip install .
5.啟動服務
sudo gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application
Gunicorn是一個Python WSGI UNIX的HTTP服務器,gunicorn,配合Apache或Nginx,可以實現簡單高效的python web的應用部署和維護。
6.驗證
curl http://192.168.5.31:5000
輸出為:"\"docker-registry server\"",搭建成功!
3 測試
3.1 上傳鏡像
由于我在本地已經做好了floodlight的image,現在需要把floodlight的image(ID為1bd7e4dda917 ) push到剛剛創建docker-registry里。
(1)創建別名
sudo docker tag 1bd7e4dda917 192.168.5.31:5000/uspeed_sdnpool/floodlight
(2)上傳鏡像
sudo docker push 192.168.5.31:5000/uspeed_sdnpool/floodlight
在上傳鏡像的過程中發生一個錯誤:
2015/01/14 16:25:47 Error: Invalid registry endpoint https://192.168.5.31:5000/v1/: Missing certificate ca.cert for key ca.key. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add --insecure-registry 192.168.5.31:5000 to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.5.31:5000/ca.crt
解決方法:
這個問題是由于Docker1.3增加了安全認證的功能,根據提示需要在啟動docker守護進程時,增加--insecure-registry 192.168.5.31:5000選項。
通過ps -ef | grep docker獲得docker的守護進程ID,通過kill -9殺死。
重新啟動docker
sudo /usr/bin/docker --insecure-registry 192.168.5.31:5000 –d
問題解決后重新上傳鏡像:
sudo docker push 192.168.5.31:5000/uspeed_sdnpool/floodlight
3.2 查詢鏡像
可以通過curl http://192.168.5.31:5000/v1/search查看剛剛的image
3.3 下載鏡像
sudo docker pull 192.168.5.31:5000/uspeed_sdnpool/floodlight
3.4 運行floodlight容器
sudo docker run -t -i -p 192.168.5.31:8080:8080 --name floodlight 192.168.5.31:5000/uspeed_sdnpool/floodlight:latest /bin/bash
-p表示floodlight容器的8080端口映射到192.168.5.31本機的8080端口
--name表示啟動的容器別名,后面是鏡像名
-t -i表示創建容器后開辟一個交互式操作終端進入容器后,執行Floodlight控制器啟動命令:
java -jar /floodlight/floodlight.jar
在宿主機訪問floodlight的Web url界面:http://192.168.5.31:8080/ui/index.html,如圖所示:

由此可說明,鏡像可以下載并成功啟動容器floodlight。
4 總結
Docker registry的安裝和使用是實施并運用Dcoker的***步,主要是因為公共的Docker Hub有時候比較慢,并且私有registry對企業內部而言,更加的安全可控,同時方便后期分發和維護標準的容器服務。除此之外,也可以通過Docker的RESTAPI(https://docs.docker.com/reference/api/registry_api/)或者第三方的編排框架管理registry。在本例子中鏡像的存儲在本地,當然也可以像openstack那樣通過glance+swift方案實現。