28.3 容器管理

Docker对单个容器操作已经提供了功能强大的命令行操作和API操作接口,但是缺乏同时对多个容器(特别是容器集群)进行管理的方案,另外还缺乏图形界面的管理平台。

目前,已经有若干开源项目试图实现更为强大和便捷的Docker管理工具,包括Citadel、Shipyard、DockerUI、Panamax等。

28.3.1 Citadel

Citadel项目官方网站为http://citadeltoolkit.org,代码在https://github.com/citadel/citadel维护。

28.3 容器管理 - 图1

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维护。

28.3 容器管理 - 图2

Shipyard项目于2013年11月发起,它目前基于Citadel项目(部分开发者来自同一团队),希望提供一套对Docker集群中资源进行管理的工具,包括对Docker容器、主机等资源的管理。它的最大特点是在核心部件之外还支持扩展镜像,可以根据需求灵活实现应用负载均衡、集中日志管理和自动化部署等功能。

此外,Shipyard还提供了方便用户使用的Web界面,如图28-6所示,功能更加强大的命令行操作接口,以及统一的API。

28.3 容器管理 - 图3

图28-6 Shipyard Web界面

28.3.3 DockerUI

DockerUI项目目前在https://github.com/crosbymichael/dockerui维护。

该项目于2013年12月发起,主要基于html/js语言实现,遵循MIT许可。用户可以通过下面的命令简单测试该工具:


  1. $ docker build -t crosbymichael/dockerui github.com/crosbymichael/dockerui
  2. $ docker run -d -p 9000:9000 -v /var/run/docker.sock:/docker.sock crosbymichael/
  3. 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.3 容器管理 - 图4

图28-7 DockerUI项目

Panamax项目基于Ruby语言,遵循Apache 2许可,可以部署在Google、Amazon等云平台甚至本地环境。

此外,Panamax还提供了开源应用的模板库,来集中管理不同应用的配置和架构,如图28-8所示。

28.3 容器管理 - 图5

图28-8 Panamax项目

28.3.5 Seagull

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

28.3 容器管理 - 图6

图28-9 Seagull项目

Seagull基于Go和JavaScript实现的,集成了Beego、AngularJS、Bootstrap、Bower、JQuery和Docker等工具。它在本地运行一个Web服务,通过Beego实现的API服务器不断请求Docker本地套接字以管理Docker。使用方法如下。

下载镜像:


  1. $ docker pull tobegit3hub/seagull

运行镜像:


  1. $ docker run -d -p 10086:10086 -v /var/run/docker.sock:/var/run/docker.
  2. socktobegit3hub/seagull

然后就可以通过浏览器访问地址http://127.0.0.1:10086登录管理界面。

官方Dockerfile镜像如下:


  1. # Base image is in https://registry.hub.docker.com/_/golang/
  2. # Refer to https://blog.golang.org/docker for usage
  3. FROM golang
  4. MAINTAINER tobe tobeg3oogle@gmail.com
  5. ENV REFREST_AT 20141023
  6. # ENV GOPATH /go
  7. # Install dependency
  8. RUN go get github.com/astaxie/beego
  9. RUN go get github.com/beego/bee
  10. RUN go get github.com/tobegit3hub/seagull
  11. # Go to the folder of seagull
  12. WORKDIR /go/src/github.com/tobegit3hub/seagull/
  13. # Build the project
  14. RUN go build seagull.go
  15. # This should be the same as httpport in conf/app.conf
  16. EXPOSE 10086
  17. # Run the server
  18. CMD ["./seagull"]

28.3.6 Dockerboard

Dockerboard是一个可视的管理工具,让Docker管理变得简单。项目地址:https://github.com/dockerboard,遵循MIT协议,如图28-10所示。

28.3 容器管理 - 图7

图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进行安装:


  1. $ go get github.com/dockerboard/dockerboard
  2. $ go install github.com/dockerboard/dockerboard
  3. $ git clone --depth 1 https://github.com/dockerboard/bluewhale.git
  4. $ dockerboard -h
  5. $ $(boot2docker shellinit)
  6. $ dockerboard server -s bluewhale/dist
  7. $ open http://$(boot2docker ip 2>/dev/null):8001
  8. Docker Hub获取Image进行安装
  9. $ docker pull dockerboard/dockerboard
  10. $ docker run -d -p 8001:8001 -v /var/run/docker.sock:/var/run/docker.sock --name
  11. dockerboard dockerboard/dockerboard

当然也可以通过Dockerfile构建:


  1. FROM golang
  2. MAINTAINER fundon cfddream@gmail.com
  3. RUN go get github.com/dockerboard/dockerboard
  4. ENV GOPATH /go/src/github.com/dockerboard/dockerboard/Godeps/_workspace:/go
  5. WORKDIR /go/src/github.com/dockerboard/dockerboard/
  6. RUN go build dockerboard.go
  7. RUN git clone --depth 1 https://github.com/dockerboard/bluewhale.git /bluewhale
  8. EXPOSE 8001
  9. ENTRYPOINT ["./dockerboard", "server", "-s", "/bluewhale/dist"]