[原創]Docker學習記錄: Shipyard+Swarm+Consul+Service Discover 搭建教程

Hex發表於2016-03-22

網上亂七八糟的資料實在是太多了, 亂, 特別亂, 而看書呢, 我讀了2本書, 一本叫做<<第一本 Docker 書>>, 另一本叫做<< Docker進階與實戰>> 在 服務發現這塊講的又不清不楚的, 坑死個人. 今天特意記錄下, 並整理下來,以防自己哪天又忘了, 也給同在研究Docker 的朋友們一個安裝教程.
我單位測試機一共四臺, 各位可以起4個虛擬機器對應, 假定分別是141,142,143,144. 都是 CentOS 6.x 系統.

Step1. 升級 CentOS 核心到3.10版本以上

首先升級141, 其它機器也是同樣的方法.
訪問elrepo.org, 按照網站上的提示一步步的安裝public key.

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

然後141是 CentOS6.x, 所以選擇安裝CentOS 6.x 的版本

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

裝好了後, 點選elrepo 網站最上面的Packages 選單, 找到 kernel-lt
http://elrepo.org/tiki/kernel-lt

按照提示直接裝最新版的 kernel long term 版本

yum --enablerepo=elrepo-kernel install kernel-lt

然後編輯/etc/grub.conf 檔案, 找到 default=1, 改成 default=0, 然後重啟 linux, 就搞定了!!!

其它伺服器依照此方法分別都更新. 更新完了, 用下面的命令看是否核心正確呼叫了.

# uname -r
4.1.2-1.el6.elrepo.x86_64

Step2. 安裝 Docker

訪問 Docker 官網, 找到針對CentOS 的安裝指示頁面.
https://docs.docker.com/engine/installation/linux/centos/

安裝官方的安裝說明安裝吧, 我就不為了顯擺而複述了. 其它機器也是這樣安裝. 裝好了請不要著急啟動 docker deamon...
因為還有坑... 請執行下面的命令修改 Docker 的預設啟動引數.

針對 ubuntu, 修改下面的檔案:

vi /etc/default/docker

新增這麼一行:

 DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

針對 CentOS, 則改為下面的這個檔案:

vi /etc/sysconfig/docker

修改 other_args 為

other_args="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"

然後你就可以啟動Docker服務了.

service start docker

Step3. Consul

這就開始了, 因為有了docker,所以千萬千萬就不要老想著原始碼安裝了,那樣太 low B 了, 恩. consul 的概念請閱讀 consul 官網的資料(當然跟上面一樣都是英文的).
https://www.consul.io/intro/getting-started/install.html

上面是原理, 看懂了就得了, 因為安裝的話我們是用 Docker 來部署的, 恩, 經過本人各種嘗試, 和各種百度以及FQ Google, 終於搭建起來了可以跨主機互聯的服務發現, 下面是我的總結:

docker run -d \
    -p 8300:8300 \
    -p 8301:8301 \
    -p 8301:8301/udp \
    -p 8302:8302 \
    -p 8302:8302/udp \
    -p 8400:8400 \
    -p 8500:8500 \
    -p 8600:53 \
    -p 8600:53/udp \
    -h dev141 \
    --restart=always \
    --name=consul progrium/consul -server -bootstrap -ui-dir=/ui -advertise 192.168.123.141 -client 0.0.0.0  

解釋下各個引數:

  • -d 容器在後臺執行, detached mode
  • --restart=always 重啟模式, always 表示永遠
  • -p 8400:8400 對映 consul的 rpc 埠8400
  • -p 192.168.123.141:8500:8500 對映到公共 IP 這樣方便我們使用 UI 介面.
  • -p 172.17.42.1:53:53/udp 繫結udp 埠53(預設 DNS埠)在 docker0 bridge 地址上.
  • -advertise 192.168.123.141 服務對外公佈的 IP, 這裡特意設定為141, 否則 service 會顯示為內部的容器的 IP 地址, 這樣就訪問不到了.
  • -client 0.0.0.0 consul 監聽的地址.

然後我們們開始部署其它三臺consul agent機器, 這次要增加 -join 引數, 先部署142, 假設142的 docker0的 bridge 地址依然是172.17.42.1

docker run -d --restart=always \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
    -h dev142 \
   --name=consul progrium/consul -server  -join 192.168.123.141 -advertise 192.168.123.142 -client 0.0.0.0      

然後是143伺服器

docker run -d --restart=always  \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
   -h dev143 \
   --name=consul progrium/consul -join 192.168.123.141 -advertise 192.168.123.143 -client 0.0.0.0 

144

docker run -d --restart=always  \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
   -h dev144 \
   --name=consul progrium/consul -join 192.168.123.141 -advertise 192.168.123.144 -client 0.0.0.0 

看看 consul 的節點是不是增加了.

Step4. Swarm+Shipyard

swarm的資料在 docker 官網上有給, 所以你可以先看看 docker 官網的介紹資料, 恩, 還是那句話, 你先看看, 部署的話不要用那個... 下面有講.

https://docs.docker.com/swarm/overview/

恩, swarm 的比較知名的而且經過我實際測試的非常牛逼的docker管理系統 是 shipyard, 官網是
http://www.shipyard-project.com

看完shipyard 介紹請移步它的安裝頁面.

http://www.shipyard-project.com/docs/deploy/manual/

不要看著 Deploy 有個自動的就想去裝自動那個啊, 自動那個是 etcd 不是 consul 的, consul 是 docker 官網推薦的, 阿里雲啊, 新浪啊都是 consul 流派, 另外我看著名字好聽也是傾向 consul 啊.

先在141伺服器裝 rethinkdb 資料庫, 按照我給的命令來裝哈, 要不然你會裝不成功, 當然我這個是入門基礎搭建教程, 不是原理教程, 先搭起來你再慢慢想唄?

docker run -d --restart=always --name shipyard-rethinkdb rethinkdb

然後下一步shipped 的 discovery 的就不要裝了,還有 proxy 那個也不用裝了.
我們們在141上繼續裝 swarm manager, 請參照下面的命令來安裝, IP-OF-CONSUL-HOST替換為你的 consul 安裝的 ip地址.

docker run -d -p 3375:3375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 consul://192.168.123.141:8500

然後在142,143,144上分別安裝 swarm agent. ip-of-host是指你部署的機器的 ip 地址, 你在哪臺機器上部署swarm agent容器你就設定哪個地址.

docker run -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr <ip-of-host>:2375 consul://192.168.123.141:8500

然後回到141機器部署 shipyard.

docker run -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8080:8080 shipyard/shipyard:latest    server -d tcp://swarm:3375

然後你就可以在瀏覽器訪問141這臺機器的8080埠, 就能看到 shipyard 的登入頁面拉, 預設賬戶是 admin, 密碼shipyard.

Step5. Registrator

registrator 是基於 docker 的 sock 檔案來做服務發現的一個第三方的方案, 我試了下, 使用起來非常簡單. 在141-143機器上執行下面的命令分別安裝registrtator

docker run -d --restart=always --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip <ip-of-host> consul://localhost:8500

引數解釋:

  • -v /var/run/docker.sock:/tmp/docker.sock 對映 docker 的 socket 到 container 中的對應位置, 這樣 registration 就能監控有哪些服務啟動了.
  • <ip-of-host>registration 所屬的主機 IP, 一定要設定此屬性, 否則服務IP會顯示為127.0.0.1
  • consul://localhost:8500 consul 繫結到本地的 consul 介面上

參考資料:

Docker DNS & Service Discovery with Consul and Registrator

裝個 nginx, 掛個域名, 再裝個 registry 啥的都是後續的玩法, 前面我們們已經搭起來玩的環境了, 我後面再寫服務發現的例子, 這些夠大家玩了, have fun, 自己體會吧.
本篇文章是我原創, 未經本人允許, 請勿轉載. 謝謝!!

相關文章