28.3 容器管理
Docker对单个容器操作已经提供了功能强大的命令行操作和API操作接口,但是缺乏同时对多个容器(特别是容器集群)进行管理的方案,另外还缺乏图形界面的管理平台。
目前,已经有若干开源项目试图实现更为强大和便捷的Docker管理工具,包括Citadel、Shipyard、DockerUI、Panamax等。
28.3.1 Citadel
Citadel项目官方网站为http://citadeltoolkit.org,代码在https://github.com/citadel/citadel维护。

Citadel项目于2014年4月由Citadel团队正式推出,基于Go语言实现,目标是提供一套在由Docker容器构成的集群中对容器进行调度的工具,主要包括集群管理组件和调度组件。
·集群管理组件(Cluster Manager)负责管理集群的状态,通过调用Docker提供的API来连接到主机,管理容器。
·调度组件(Scheduler)决策如何进行调度,支持多套调度方法,包括基于标签、基于是否同一镜像、基于主机、组合方法等多种调度机制。
使用Citadel首先要为调度组件提供容器类型,并指定调度所关心的资源限制;此后,调度器会根据容器类型、服务将容器启动到合适的主机上去。
28.3.2 Shipyard
Shipyard项目官方网站为http://shipyard-project.com/,代码在https://github.com/shipyard/shipyard维护。

Shipyard项目于2013年11月发起,它目前基于Citadel项目(部分开发者来自同一团队),希望提供一套对Docker集群中资源进行管理的工具,包括对Docker容器、主机等资源的管理。它的最大特点是在核心部件之外还支持扩展镜像,可以根据需求灵活实现应用负载均衡、集中日志管理和自动化部署等功能。
此外,Shipyard还提供了方便用户使用的Web界面,如图28-6所示,功能更加强大的命令行操作接口,以及统一的API。

图28-6 Shipyard Web界面
28.3.3 DockerUI
DockerUI项目目前在https://github.com/crosbymichael/dockerui维护。
该项目于2013年12月发起,主要基于html/js语言实现,遵循MIT许可。用户可以通过下面的命令简单测试该工具:
- $ docker build -t crosbymichael/dockerui github.com/crosbymichael/dockerui
- $ docker run -d -p 9000:9000 -v /var/run/docker.sock:/docker.sock crosbymichael/
- dockerui -e /docker.sock
运行成功后,打开浏览器,访问http://:9000,如图28-7所示。
28.3.4 Panamax
Panamax项目官方网站为http://panamax.io,代码在https://github.com/CenturyLinkLabs/panamax-ui维护。
Panamax项目诞生于2014年3月,由CenturyLink实验室发起(是该实验室第一个孵化出的开源项目),希望通过一套优雅的界面来实现对复杂的Docker容器应用的管理,例如利用简单拖拽来完成操作。Panamax项目基于Docker、CoreOS和Fleet,可以提供对容器进行自动化管理和任务调度。

图28-7 DockerUI项目
Panamax项目基于Ruby语言,遵循Apache 2许可,可以部署在Google、Amazon等云平台甚至本地环境。
此外,Panamax还提供了开源应用的模板库,来集中管理不同应用的配置和架构,如图28-8所示。

图28-8 Panamax项目
28.3.5 Seagull
Seagull是由小米工程师陈迪豪发布的开源Docker容器和镜像的Web界面监控工具,目前在https://github.com/tobegit3hub/seagull维护,如图28-9所示。

图28-9 Seagull项目
Seagull基于Go和JavaScript实现的,集成了Beego、AngularJS、Bootstrap、Bower、JQuery和Docker等工具。它在本地运行一个Web服务,通过Beego实现的API服务器不断请求Docker本地套接字以管理Docker。使用方法如下。
下载镜像:
- $ docker pull tobegit3hub/seagull
运行镜像:
- $ docker run -d -p 10086:10086 -v /var/run/docker.sock:/var/run/docker.
- socktobegit3hub/seagull
然后就可以通过浏览器访问地址http://127.0.0.1:10086登录管理界面。
官方Dockerfile镜像如下:
- # Base image is in https://registry.hub.docker.com/_/golang/
- # Refer to https://blog.golang.org/docker for usage
- FROM golang
- MAINTAINER tobe tobeg3oogle@gmail.com
- ENV REFREST_AT 20141023
- # ENV GOPATH /go
- # Install dependency
- RUN go get github.com/astaxie/beego
- RUN go get github.com/beego/bee
- RUN go get github.com/tobegit3hub/seagull
- # Go to the folder of seagull
- WORKDIR /go/src/github.com/tobegit3hub/seagull/
- # Build the project
- RUN go build seagull.go
- # This should be the same as httpport in conf/app.conf
- EXPOSE 10086
- # Run the server
- CMD ["./seagull"]
28.3.6 Dockerboard
Dockerboard是一个可视的管理工具,让Docker管理变得简单。项目地址:https://github.com/dockerboard,遵循MIT协议,如图28-10所示。

图28-10 Dockerboard项目
Dockerboard目前由两部分组成:dockerboard和bluewhale:
·dockerboard是由Go开发的后端API服务。
·bluewhale是由Angular.js搭建的前端Web UI。
安装&使用
默认Dockerboard可以通过http://127.0.0.1:8001继续访问管理;如果使用boot2docker,可以通过http://$(boot2docker ip 2>/dev/null):8001:8001)。下面介绍几种安装方式。
通过Go进行安装:
- $ go get github.com/dockerboard/dockerboard
- $ go install github.com/dockerboard/dockerboard
- $ git clone --depth 1 https://github.com/dockerboard/bluewhale.git
- $ dockerboard -h
- $ $(boot2docker shellinit)
- $ dockerboard server -s bluewhale/dist
- $ open http://$(boot2docker ip 2>/dev/null):8001
- 从Docker Hub获取Image进行安装
- $ docker pull dockerboard/dockerboard
- $ docker run -d -p 8001:8001 -v /var/run/docker.sock:/var/run/docker.sock --name
- dockerboard dockerboard/dockerboard
当然也可以通过Dockerfile构建:
- FROM golang
- MAINTAINER fundon cfddream@gmail.com
- RUN go get github.com/dockerboard/dockerboard
- ENV GOPATH /go/src/github.com/dockerboard/dockerboard/Godeps/_workspace:/go
- WORKDIR /go/src/github.com/dockerboard/dockerboard/
- RUN go build dockerboard.go
- RUN git clone --depth 1 https://github.com/dockerboard/bluewhale.git /bluewhale
- EXPOSE 8001
- ENTRYPOINT ["./dockerboard", "server", "-s", "/bluewhale/dist"]
