動(dòng)手搭建Shipyard,簡化跨主機(jī)的Docker容器集群管理
Shipyard(github)是建立在docker集群管理工具Citadel之上的可以管理容器、主機(jī)等資源的web圖形化工具。包括core和extension兩個(gè)版本,core即shipyard主要是把多個(gè) Docker host上的 containers 統(tǒng)一管理(支持跨越多個(gè)host),extension即shipyard-extensions添加了應(yīng)用路由和負(fù)載均衡、集中化日志、部署等。
1. 幾個(gè)概念
engine
一個(gè)shipyard管理的docker集群可以包含一個(gè)或多個(gè)engine(引擎),一個(gè)engine就是監(jiān)聽tcp 端口的docker daemon。shipyard管理docker daemon、images、containers完全基于Docker API,不需要做其他的修改。另外,shipyard可以對(duì)每個(gè)engine做資源限制,包括CPU和內(nèi)存;因?yàn)門CP監(jiān)聽相比Unix socket方式會(huì)有一定的安全隱患,所以shipyard還支持通過SSL證書與docker后臺(tái)進(jìn)程安全通信。
rethinkdb
RethinkDB是一個(gè)shipyard項(xiàng)目的一個(gè)docker鏡像,用來存放賬號(hào)(account)、引擎(engine)、服務(wù)密鑰(service key)、擴(kuò)展元數(shù)據(jù)(extension metadata)等信息,但不會(huì)存儲(chǔ)任何有關(guān)容器或鏡像的內(nèi)容。一般會(huì)啟動(dòng)一個(gè)shipyard/rethinkdb容器shipyard-rethinkdb-data來使用它的/data作為數(shù)據(jù)卷供另外rethinkdb一個(gè)掛載,專門用于數(shù)據(jù)存儲(chǔ)。
2. 搭建過程
修改tcp監(jiān)聽
Shipyard 要管理和控制 Docker host 的話需要先修改 Docker host 上的默認(rèn)配置使其監(jiān)聽tcp端口(可以繼續(xù)保持Unix socket)。有以下2種方式
1.sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d啟動(dòng)docker daemon。如果為了避免每次啟動(dòng)都寫這么長的命令,可以直接在/etc/init/docker.conf中修改。
2.修改/etc/default/docker的DOCKER_OPTS
DOCKER_OPTS="-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock"。這種方式在我docker version 1.4.1 in ubuntu 14.04上并沒有生效。
- 重啟服務(wù)
- $ sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d
- 驗(yàn)證
- $ netstat -ant |grep 4243
- tcp6 0 0 :::4243
啟動(dòng)rethinkdb
shipyard(基于Python/Django)在v1版本時(shí)安裝過程比較復(fù)雜,既可以通過在host上安裝,也可以部署shipyard鏡像(包括shipyard-agent、shipyard-deploy等組件)。v2版本簡化了安裝過程,啟動(dòng)兩個(gè)鏡像就完成:
- 獲取一個(gè)/data的數(shù)據(jù)卷
- $sudo docker run -it -d --name shipyard-rethinkdb-data \
- --entrypoint /bin/bash shipyard/rethinkdb -l
- 使用數(shù)據(jù)卷/data啟動(dòng)RethinkDB
- docker run -it -P -d --name shipyard-rethinkdb \
- --volumes-from shipyard-rethinkdb-data shipyard/rethinkdb
部署shipyard鏡像
啟動(dòng)shipyard控制器:
- sudo docker run -it -p 8080:8080 -d --name shipyard \
- --link shipyard-rethinkdb:rethinkdb shipyard/shipyard
至此已經(jīng)可以通過瀏覽器訪問http://host:8080來訪問shipyard UI界面了。
第一次run后,關(guān)閉再次啟動(dòng)時(shí)直接使用:
- sudo docker stop shipyard shipyard-rethinkdb shipyard-rethinkdb-data
- sudo docker start shipyard-rethinkdb-data shipyard-rethinkdb shipyard
#p#
圖示
登錄:
默認(rèn)用戶名/密碼為 admin/shipyard
主界面:
Dashboard展示在添加engine時(shí)指定的CPU以及內(nèi)存的使用情況。
容器:
shipyard管理的所有docker主機(jī)的所有容器,包括stop和running狀態(tài)的。可以直接點(diǎn)擊DEPLOY按鈕來從鏡像運(yùn)行出其他容器,與docker run的選項(xiàng)幾乎相同,可以限制CPU和內(nèi)存的使用,詳見shipyard的containers文檔。
容器操作:
可以stop、start、restart容器,通過LOGS可以看到容器日志輸出,SCALE可 以批量(規(guī)模化)部署該容器,這個(gè)操作與容器的Type屬性息息相關(guān)。因?yàn)閟hipyard可以管理多個(gè)host的docker容器,所以啟動(dòng)一個(gè)容器的 type可以是:service——可以在具有相同label的engine上運(yùn)行;unique——一個(gè)host上只允許某個(gè)鏡像的一個(gè)實(shí)例運(yùn) 行;host——在指定的host上運(yùn)行容器,啟動(dòng)的時(shí)候通過--label host:<host-id>語法指定docker host。
engine管理:
一 個(gè)engine就是一個(gè)docker daemon,docker daemon下啟動(dòng)著多個(gè)containers,可以對(duì)engine限制一個(gè)整體的CPU和內(nèi)存限制,shipyard通過TCP端口連接daemon。 需要注意的是docker client與server的版本問題:(因?yàn)閟hipyard目前還在快速的完善過程,不同版本的docker應(yīng)該是向下兼容的)
- curl -X GET http://172.29.88.223:4243/v1.15/containers/json
- client and server don't have same version (client : 1.15, server: 1.13)
3. shipyard-cli
目前圖形化界面能做的操作其實(shí)很少,正在強(qiáng)大的是通過shipyard提供的命令行窗口(稱作Shipyard CLI)進(jìn)行管理,參考http://shipyard-project.com/docs/usage/cli/
啟動(dòng)命令行交互模式:
- sudo docker run --rm -it shipyard/shipyard-cli
使用它甚至可以替代docker客戶端。
- sean@seanubt:~$ sudo docker run -it shipyard/shipyard-cli
- shipyard cli> shipyard help
- NAME:
- shipyard - manage a shipyard cluster
- USAGE:
- shipyard [global options] command [command options] [arguments...]
- VERSION:
- 2.0.8
- COMMANDS:
- login login to a shipyard cluster
- change-password update your password
- accounts show accounts
- add-account add account
- delete-account delete account
- containers list containers
- inspect inspect container
- run run a container
- stop stop a container
- restart restart a container
- scale scale a container
- logs show container logs
- destroy destroy a container
- engines list engines
- add-engine add shipyard engine
- remove-engine removes an engine
- inspect-engine inspect an engine
- service-keys list service keys
- add-service-key adds a service key
- remove-service-key removes a service key
- extensions show extensions
- add-extension add extension
- remove-extension remove an extension
- webhook-keys list webhook keys
- add-webhook-key adds a webhook key
- remove-webhook-key removes a webhook key
- info show cluster info
- events show cluster events
- help, h Shows a list of commands or help for one command
- GLOBAL OPTIONS:
- --help, -h show help
- --generate-bash-completion
- --version, -v print the version
- 登錄shipyard
- shipyard cli> shipyard login
- URL: http://172.29.88.205:8080
- Username: admin
- Password:
- 查看containers
- shipyard cli> shipyard containers
- 啟動(dòng)一個(gè)容器
- shipyard cli> shipyard run --name nginx:1.7.6 --container-name web_test \
- --cpus 0.2 \
- --memory 64 \
- --type service \
- --hostname nginx-test \
- --domain example.com \
- --link redis:db \
- --port tcp/172.29.88.205:81:8081 \
- --port tcp/::8000 \
- --restart "on-failure:5" \
- --env FOO=bar \
- --label dev \
- 查看容器日志(只能接容器ID,暫不能使用容器名)
- shipyard cli> shipyard logs ff2761d
- 關(guān)閉并移除容器
- shipyard cli> shipyard destroy <container_id>
試用后覺得shipyard的web只實(shí)現(xiàn)了最基本的功能,如果需要方便的從web管理docker集群的話,還需要做很多定制工作。
原文鏈接:http://seanlook.com/2014/12/29/docker-shipyard-centralized-management-webui/