Docker 1.12的黑魔法
Jul 30, 2016
2 minutes read

今年2016 Docker Conf 發表後
引起大家狂熱的討論,整個會場都高潮了~XD

[引用一下相關的結論文章]
DockerCon 2016會議:發布內容的總結及主要收穫 原文網址:https://kknews.cc/tech/mmx4yp.html

Docker Swarm 已死!Docker Swarm 萬歲! 原文網址:https://kknews.cc/tech/8e2egq.html

官方無敵威的展示影片

Alt text
看完影片後,安迪兒超期待新版Docker1.12的發表
等到了rc2,就迫不急待的試玩一下
因為安迪兒想把舊式的swarm換成新的docker swarm
就這樣一路從Docker1.12 rc2 rc3 rc4都玩了一遍
(因為不少問題和bug,所以才會一直試到rc4 …orz)

終於今天Docker v1.12.0正式定版
Docker大大們開發的能量超強大
每一版都更新很快,也修了一大堆東西~XD
https://github.com/docker/docker/releases

既然Docker v1.12定版了
安迪兒也馬上全新安裝
順便記錄一下和分享試用Docker 1.12的心得

[這次的docker增加不少新功能]

Swarm

安迪兒其實是為了這個功能
才會一直的在try 因為舊版的Swarm其實有點麻煩
要建置Consul Key Store daemon
要建overlay的網路
還要再自已寫一堆腳本去監控和偵測狀態和處理的方式

而新版的docker 1.12整合了Swarm
也有了新的swarm cluster使用和管理方式
大大的簡化了整個的流程

新的功能:

Docker Service、Stack、Cloud

整合stack與service的管理,可以使用deploy把stack部署到cloud上

Health check

https://github.com/docker/docker/pull/23218
可以自訂節點的健康
–health-cmd (health用的指令檔)
–health-interval (health的秒數)
然後用一般的docker inspect就可以查詢check的結果

docker inspect --format='' xxname healthy

Live restore

https://github.com/docker/docker/pull/23213
啟動時增加這個參數,daemon掛了也不會影響到container –live-restore

overlay2

https://github.com/docker/docker/pull/22126
裡面有benchmark的數據可以參考一下

其它還有很多細的東西、指令、參數之類
有興趣的,可以多查查官方的說明
看了這些,應該手癢了吧

[實作時間到嘍!]

1. 安裝新版docker for 1.12

參考這頁的說明
https://github.com/docker/docker/releases

執行安裝指令

curl -fsSL https://experimental.docker.com/ | sh
sudo usermod -aG docker andy


2. 玩玩Container的叢集,建一個swarm來玩玩吧

首先在master機器上,建立管理的節點

docker swarm init --listen-addr docker112-swarm-admin:2377

再來,在其它台node機器上輸入

docker swarm join \
 --token SWMTKN-1-55xrvnhhax0eqc0hi4iu6aihh8msqvlfjdgqetaqvlf8qm4n0z-7ekdghz9an5d4jpx4ibdaigtx \
 10.240.0.3:2377


都加入叢集後,可以在主節點master那台,查一下所有的node

docker node ls

看看,超神奇的,就這樣一個跨機器的Container cluster就立完成了
這是不是docker的 黑魔法 吶~~~太可怕了,合併swarm後簡化許多繁雜的東西

3. 新增自已用的network

用docker network 建立一個自已的overlay來玩玩
建完並指定Container的overlay後,Container就能視為同網段,跨各種機器運行了

docker network create --driver overlay bowwow-net  

4. 來見識一下讓大家瘋狂的Docker Service威力吧

建個postgresql database,直接replicas 2台
2台都是同樣的database

docker service create --replicas 2 -p 5432:5432 -p 8000:5432 --name=postgresql --network=bowwow-net --env="constraint:node==docker-swarm-node1" --mount type=volume,source=/home/app/metadb,target=/var/lib/postgresql -e POSTGRESQL_USER=postgres -e POSTGRESQL_PASS=1234 -e POSTGRESQL_DB=demodb bowwow/posttgresql9.4
docker service ls

可以看到postgresql啟動完成,2台分散在不同的機器上

直接來玩一下,2台機器的postgresql同時都能連上

隨便改一下其中一台,建一個新的table

過一會另一台就跟都同步了

而且因為用了bowwow-net的關係
開三台機器,三台機器都能互相找的到
也就是說,連上3台機器的ip,都能接上這個postgresql db
但這個postgresql db是分散成2個Container在跑
docker都幫你做了ha、scale和cluster了
只能說:超~~的!!!

隨興的新增和刪除Container節點
docker service ps postgresql
docker service scale postgresql=3
docker service scale postgresql=1
docker service update --replicas 2 postgresql
新版docker有rolling update服務

–update-delay

他會慢慢的更版,不會一次都換掉
ex:

docker service create \
  --replicas 3 \
  --name redis \
  --update-delay 10s \
  redis:3.0.6
試一下Swarm Container Cluster移轉的功能

惡意關掉刪除其中一台的postgresql Container

果然夠優~馬上又自動的在別台機器上重啟了一個相同的服務

一次開10個來玩玩吧

不想要服務了,刪除它

docker service rm postgresql
docker service ls

新的Docker以上這些功能
跟本就是有k8s(Kubernetes)的影子
連相關指令名稱都有點相近
難怪大家整個看到傻眼,進化後的Docker太強大了。

5. 部署Docker Stack

大致上看起來
新的docker swarm像是用service就可以處理&管理相關的container服務
如果想用之前compose之類的一次啟動管理的方式呢?? 安迪兒找了找,發現docker有一個deploy的相關功能
看了他文字上有說,要用dab來部署
忍不住好奇試了一下
真的是可以用

首先,先裝上最新版的docker-compose(1.8)
參考這頁
https://github.com/docker/compose/releases

curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose  

編寫一下docker-compose file
啟動它,成功後,可以再自行下指令bundle成dab檔
再使用docker deploy去部署

sudo docker-compose up -d
sudo docker-compose bundle -o elk.dab
docker deploy elk



看一下結果吧

呼…終於,東西實在太多了,安迪就也沒辦法一次說完試完
總之,這次的docker 1.12非常的強大
如果想要有較簡易的,除了k8s或mesos另外選擇的
也許考慮一下原生的docker看看嘍
應該不會失望的~~~XD
收工嘍~收工嘍!


Back to posts


comments powered by Disqus