由于本人比較懶尽狠,對(duì)于整天配置環(huán)境感到無聊骑篙,用了docker之后,都是能上docker即上docker全庸。但是以前docker在跨主機(jī)情況支持較弱,往往要用復(fù)雜的mesos或者k8s融痛,反正配置一次我就怕了壶笼。忽然發(fā)現(xiàn)docker 1.12之后自帶了swarm來實(shí)現(xiàn)容器編排。
下面記錄一下雁刷,一次利用swarm來實(shí)現(xiàn)容器編排的過程覆劈,僅僅是記錄過程。
實(shí)踐環(huán)境
- 2臺(tái)1核1G服務(wù)器沛励,用的企鵝家的服務(wù)器责语。
- 操作系統(tǒng):centos 7.2 64bit
- docker版本:1.12.6
安裝docker
既然是docker容器編排,必定要安裝docker啦(僅需兩句命令即可安裝)目派。
yum install epel-release -y
yum install docker
配置主節(jié)點(diǎn)服務(wù)器
主服務(wù)器負(fù)責(zé)調(diào)度容器分配那些啦坤候,配置很簡(jiǎn)單,請(qǐng)看下面的命令
ifconfig
docker swarm init --advertise-addr {這里換成上面查到的內(nèi)網(wǎng)ip}
為什么要內(nèi)網(wǎng)ip呢?這種服務(wù)公開到外網(wǎng)企蹭,被攻擊了咋辦白筹。執(zhí)行了這句命令之后會(huì)輸出一句命令智末,這句命令就是在其它服務(wù)器執(zhí)行,說明要加入這個(gè)集群徒河。
配置從服務(wù)器
只需要執(zhí)行上面那句命令(下面僅僅是例子)
docker swarm join --token {token} {這里隱藏}:2377
鏡像服務(wù)器配置
請(qǐng)注意系馆,請(qǐng)把所有用于容器編排的服務(wù)器的docker鏡像源指向同一個(gè)鏡像源。因?yàn)槟銢]理由更新鏡像都手工在每一個(gè)服務(wù)器更新吧虚青,所以請(qǐng)自己建立私有鏡像倉庫它呀,反正也特簡(jiǎn)單。
docker run -d -p {ip}:5000:5000 -v /root/my_registry:/tmp/registry registry
還是那一句話棒厘,用內(nèi)網(wǎng)ip,真心不敢輕易使用外網(wǎng)下隧。上面命令已經(jīng)部署好私有倉庫服務(wù)奢人,但是這種情況下,提交鏡像會(huì)報(bào)錯(cuò)淆院,還需要修改一個(gè)文件何乎。
vim /etc/docker/daemon.json
添加下面的內(nèi)容(注意替換{自己的ip}):
{ "insecure-registries":["{自己的ip}:5000"] }
重啟docker服務(wù)即可。
注意:所有需要從該私有倉庫下載鏡像的服務(wù)器土辩,也需要把這段內(nèi)容復(fù)制過去支救,ip就是私有倉庫ip。
往私有鏡像倉庫提交鏡像
我們簡(jiǎn)單說一下命令即可拷淘,不懂可以問我各墨。
docker build --tag={這個(gè)是鏡像名字} .
docker tag {這個(gè)是鏡像名字} {私有倉庫內(nèi)網(wǎng)ip}:5000/{這個(gè)是鏡像名字}
docker push {私有倉庫內(nèi)網(wǎng)ip}:5000/{這個(gè)是鏡像名字}
容器編排使用
- 創(chuàng)建服務(wù)(我們把每一個(gè)應(yīng)用都視為一個(gè)服務(wù),每個(gè)服務(wù)下有若干個(gè)容器組成)
docker service create --replicas 2 --name app_b -p 33333:80 {ip}:5000/web_app_a /var/webApp
--replicas是說明一共要啟動(dòng)多少個(gè)容器
--name是為這個(gè)服務(wù)起一個(gè)名字
-p是端口映射启涯,這是一個(gè)神奇的東西贬堵,以我們的例子為例,每一臺(tái)服務(wù)器33333端口都會(huì)隨機(jī)代理到我們服務(wù)下的一個(gè)容器结洼,竟然連負(fù)載均衡都處理好了黎做,完美。
{ip}:5000/web_app_a 這個(gè)只是鏡像名字
/var/webApp這個(gè)只是我寫的東西的啟動(dòng)命令而已
- 查看服務(wù)的容器分配情況
docker service ps {服務(wù)名字}
-
刪除一個(gè)服務(wù)
docker service rm {服務(wù)名字}
4. 調(diào)整服務(wù)的容器個(gè)數(shù)
docker service scale {服務(wù)名字}={服務(wù)數(shù)量}
5. 更新服務(wù)所使用的鏡像
docker service update --image {鏡像名字} {服務(wù)名字}
6. 更新服務(wù)的內(nèi)存限制
docker service update --reserve-memory {內(nèi)存使用} {服務(wù)名字}
7. 查看創(chuàng)建了哪些服務(wù)
docker service ls
8. 查看服務(wù)器節(jié)點(diǎn)情況
docker node ls
**容器編排的使用場(chǎng)景**
這個(gè)適用于彈性部署的場(chǎng)景松忍,例如搶購蒸殿,秒殺,服務(wù)壓力驟增鸣峭,需要短時(shí)間增加容器宏所。
同時(shí)適用于分布式情況,畢竟分布式部署應(yīng)用還需要考慮叽掘,單點(diǎn)故障的情況楣铁。
還有就是異步處理任務(wù),配合動(dòng)態(tài)增減服務(wù)器更扁,就可以節(jié)省資源盖腕,降低成本赫冬。
注意:本文僅僅是個(gè)人一次docker 容器編排實(shí)踐實(shí)驗(yàn)的記錄。