叫板OpenStack:八步用Docker實(shí)現(xiàn)私有云
看到各大廠商的云主機(jī),會(huì)不會(huì)覺得高大上?目前大公司的主流方案是OpenStack,比如某個(gè)公司的私有云
其實(shí),我們可以通過Docker可以很容易實(shí)現(xiàn)自己的私有云。
下面進(jìn)入正題。
假設(shè)你所在的公司擁有一臺(tái)功能強(qiáng)悍的服務(wù)器,假設(shè)是centos,但開發(fā)人員,測(cè)試人員如果都在這一臺(tái)主機(jī)上進(jìn)行開發(fā),測(cè)試,后果是災(zāi)難性的,但由于只有一 臺(tái)服務(wù)器,你們老板甚至還想把這剩余的性能榨取出來搭建一些服務(wù)賣給大眾...以往的話,開發(fā),測(cè)試人員肯定要摔鍵盤了,這不是坑爹么?但如果你會(huì) Docker,就能很容易實(shí)現(xiàn)這一目標(biāo),升職加薪,當(dāng)上總經(jīng)理,出任CEO,贏取白富美,迎來人生的***呢!
是不是有點(diǎn)小激動(dòng)了?來吧,哥教你怎么做。
一.升級(jí)Centos內(nèi)核
官方推薦內(nèi)核使用3.8以上,那我們升到長期穩(wěn)定版的3.10.
- [root@iZ2893wjzgyZ ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- [root@iZ2893wjzgyZ ~]# rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
- [root@iZ2893wjzgyZ ~]# yum --enablerepo=elrepo-kernel install kernel-lt -y [root@iZ2893wjzgyZ ~]# vim /etc/grub.conf default=1 改為default=0 [root@iZ2893wjzgyZ ~]# reboot [root@iZ2893wjzgyZ ~]# uname -a Linux iZ2893wjzgyZ 3.10.65-1.el6.elrepo.x86_64 #1 SMP Sat Jan 17 10:36:35 EST 2015 x86_64 x86_64 x86_64 GNU/Linux
二.安裝docker
- [root@iZ2893wjzgyZ ~]# yum install http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
- [root@iZ2893wjzgyZ ~]# yum install docker-io
三.啟動(dòng)docker
- [root@iZ2893wjzgyZ ~]# service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
四.獲取鏡像
由于鏡像倉庫在國內(nèi),國內(nèi)慢的令人發(fā)指,推薦有import方式使用鏡像(此例采用的此種鏡像方案可以很容易安裝ssh服務(wù)),在http://openvz.org/Download/templates/precreated中有很多壓縮的鏡像文件,可以將這些文件下載后采用import方式使用鏡像
- # wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
- # cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 05ac7c0b9383 17 seconds ago 215.5 MB
這樣我們就可以使用這個(gè)鏡像作為自己的Base鏡像
#p#
五.實(shí)現(xiàn)sshd,在Base鏡像基礎(chǔ)上生成一個(gè)新鏡像
- #docker run -t -i ubuntu:base /bin/bash
- root@050f6efc5ed6:/# vim /etc/apt/sources.list
- deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
- root@050f6efc5ed6:/# apt-get update
- 安裝supervisor服務(wù)
- root@050f6efc5ed6:/# apt-get supervisor
- root@050f6efc5ed6:/# cp supervisord.conf conf.d/
- root@050f6efc5ed6:/# cd conf.d/
- root@050f6efc5ed6:/# vi supervisord.conf
- ; supervisor config file
- [unix_http_server]
- file=/var/run/supervisor.sock ; (the path to the socket file)
- chmod=0700 ; sockef file mode (default 0700)
- [supervisord]
- logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
- pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
- childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
- nodaemon=true ;(修改該軟件的啟動(dòng)模式為非daemon,否則docker 在執(zhí)行的時(shí)候會(huì)直接退出)
- [include]
- files = /etc/supervisor/conf.d/*.conf
- [program:sshd]
- command = /usr/sbin/sshd -D ;
- root@050f6efc5ed6:/# mkdir /var/run/sshd
- root@050f6efc5ed6:/# passwd root
- root@050f6efc5ed6:/# vi /etc/ssh/sshd_config
- root@050f6efc5ed6:/# exit
- 退出之后自動(dòng)生成一個(gè)容器,接下來把容器commit生成封裝了sshd的鏡像
- # docker commit f3c8 ubuntu
- 5c21b6cf7ab3f60693f9b6746a5ec0d173fd484462b2eb0b23ecd2692b1aff6b
- [root@iZ2893wjzgyZ tmp]# docker images
- REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
- ubuntu sshd 02c4391d40a0 47 minutes ago 661.4 MB
#p#
六.開始分配容器
- [root@iZ2893wjzgyZ tmp]# docker run -p 301:22 -d --name test ubuntu /usr/bin/supervisord
- [root@iZ2893wjzgyZ tmp]# docker run -p 302:22 -d --name dev ubuntu /usr/bin/supervisord
- [root@iZ2893wjzgyZ tmp]# docker run -p 303:22 -d --name client1 ubuntu /usr/bin/supervisord
- .......
- [root@iZ2893wjzgyZ tmp]# docker run -p xxxxx:22 -d --name clientN ubuntu /usr/bin/supervisord
讓我們進(jìn)入容器看一看,瞧一瞧(114.215.86.228是宿主機(jī)的IP)
通過Xshell即可進(jìn)入。
這樣就順利隔離了N個(gè)容器,且每一個(gè)都是以黨中央centos領(lǐng)導(dǎo)下的純凈的ubuntu系統(tǒng),按這種分配方式,所有容器性能和宿主機(jī)一樣,讓我們看一看:
Centos:
容器:test
七.搭建自己的私有倉庫
老板現(xiàn)在用這臺(tái)閑置的主機(jī)賺了很多錢,于是公司快速發(fā)展,老板嘗到甜頭,又買來了幾十臺(tái)服務(wù)器,這時(shí)候,摳門老板想了想,每臺(tái)主機(jī)這么搞一次,我豈不是要多給幾天工錢?
服務(wù)的封裝才是Docker的殺手锏,怎么可能讓這種工作重復(fù)數(shù)十次?我們可以搭建自己的私有倉庫。有點(diǎn)類似github的方式,將封裝好的鏡像push到倉庫,其他主機(jī)裝好docker后,pull下來即可,在這里不做說明。
八.擴(kuò)展
不同人群需要的主機(jī)性能不同,總不能所有的人都分配一樣的主機(jī)吧?這就涉及到容器的管理了,老板意識(shí)到這個(gè)問題,有一天對(duì)開發(fā)說,你看看人家openstack管理界面那么高大上,還能將不同主機(jī)切割不同的性能,我們?yōu)槭裁床豢梢?然后老板很快得到滿意的方案:Kubernetes(有很多其他方案可以實(shí)現(xiàn))
Kubernetes是Google開源的容器集群管理系統(tǒng)。它構(gòu)建于docker技術(shù)之上,為容器化的應(yīng)用提供資源調(diào)度、部署運(yùn)行、服務(wù)發(fā)現(xiàn)、擴(kuò) 容縮容等整一套功能,本質(zhì)上可看作是基于容器技術(shù)的mini-PaaS平臺(tái).
總結(jié):經(jīng)過這八個(gè)步驟,大概就已經(jīng)實(shí)現(xiàn)了私有云的基本功能,其實(shí)Docker能做的事情遠(yuǎn)不如此,本人才疏學(xué)淺,使用不久,這里只闡述想到的這一種方案。