打造SDN容器百寶箱(二)
在2014年12月8、9號(hào)的“中國未來網(wǎng)絡(luò)發(fā)展與創(chuàng)新論壇暨全球SDN開放網(wǎng)絡(luò)高峰會(huì)議”上,國內(nèi)道里云公司已經(jīng)利用openstack+Docker技術(shù)組合,提供了跨數(shù)據(jù)中心的“小云”服務(wù),從用戶視角提出了“租戶控制器”理念。個(gè)人認(rèn)為,這體現(xiàn)了道里云對(duì)云和SDN的理解既務(wù)實(shí)又靈活,沒有困死在SDN的學(xué)術(shù)定義中,也沒有“累死”在打造openstack的無敵航母上。話不羅嗦了,這次主要寫如何搭建Docker私有倉庫及相關(guān)細(xì)節(jié)注意事項(xiàng)。
1 安裝環(huán)境
此環(huán)境搭建主要在Ubuntu14.04系統(tǒng)上進(jìn)行:
$ 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.安裝環(huán)境依賴庫
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.啟動(dòng)服務(wù)
sudo gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 docker_registry.wsgi:application
Gunicorn是一個(gè)Python WSGI UNIX的HTTP服務(wù)器,gunicorn,配合Apache或Nginx,可以實(shí)現(xiàn)簡(jiǎn)單高效的python web的應(yīng)用部署和維護(hù)。
6.驗(yàn)證
curl http://192.168.5.31:5000
輸出為:"\"docker-registry server\"",搭建成功!
3 測(cè)試
3.1 上傳鏡像
由于我在本地已經(jīng)做好了floodlight的image,現(xiàn)在需要把floodlight的image(ID為1bd7e4dda917 ) push到剛剛創(chuàng)建docker-registry里。
(1)創(chuàng)建別名
sudo docker tag 1bd7e4dda917 192.168.5.31:5000/uspeed_sdnpool/floodlight
(2)上傳鏡像
sudo docker push 192.168.5.31:5000/uspeed_sdnpool/floodlight
在上傳鏡像的過程中發(fā)生一個(gè)錯(cuò)誤:
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
解決方法:
這個(gè)問題是由于Docker1.3增加了安全認(rèn)證的功能,根據(jù)提示需要在啟動(dòng)docker守護(hù)進(jìn)程時(shí),增加--insecure-registry 192.168.5.31:5000選項(xiàng)。
通過ps -ef | grep docker獲得docker的守護(hù)進(jìn)程ID,通過kill -9殺死。
重新啟動(dòng)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 運(yùn)行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本機(jī)的8080端口
--name表示啟動(dòng)的容器別名,后面是鏡像名
-t -i表示創(chuàng)建容器后開辟一個(gè)交互式操作終端進(jìn)入容器后,執(zhí)行Floodlight控制器啟動(dòng)命令:
java -jar /floodlight/floodlight.jar
在宿主機(jī)訪問floodlight的Web url界面:http://192.168.5.31:8080/ui/index.html,如圖所示:

由此可說明,鏡像可以下載并成功啟動(dòng)容器floodlight。
4 總結(jié)
Docker registry的安裝和使用是實(shí)施并運(yùn)用Dcoker的***步,主要是因?yàn)楣驳腄ocker Hub有時(shí)候比較慢,并且私有registry對(duì)企業(yè)內(nèi)部而言,更加的安全可控,同時(shí)方便后期分發(fā)和維護(hù)標(biāo)準(zhǔn)的容器服務(wù)。除此之外,也可以通過Docker的RESTAPI(https://docs.docker.com/reference/api/registry_api/)或者第三方的編排框架管理registry。在本例子中鏡像的存儲(chǔ)在本地,當(dāng)然也可以像openstack那樣通過glance+swift方案實(shí)現(xiàn)。