docker针对于系统工程师或者开发人员来说操作比较简单。一般我们习惯了对着黑黑的屏幕敲命令,docker pull,docker push,docker run,docker logs,docker ps等等。或者我们将常用的docker原生api封装到我们的shell脚本工具或者python脚本工具中去使用管理docker。然而对于部分用户,或者说非技术用户去使用docker难度其实不小。因此一个明了的可视化管理界面显得非常重要了。万物诞生总有其诞生的理由。可能只是为了服务某部分人。下面说一下两个比较常用的docker管理平台(dockerui和shiyard),以下都是经过本人亲测的,让我说说我的使用感受。
dockerui
部署方面:
直接执行命令,将dockerui容器镜像下载到本地映射到9000端口,以容器的方式启动即可。
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui
部署成功后,在服务器中执行docker ps 确定容器是否起来了。
如上图所示,即可判定容器已经起来了。
在浏览器输入ip:9000即可访问了。
界面如上,界面比较整洁。首页的信息分别是运行中的容器(附带运行了的时间),容器创建记录曲线,和镜像创建记录曲线。
上图为容器管理的界面,上面列出了正在跑的容器情况,包括容器名,镜像,命令,以及创建时间。针对于具体的容器可以点击进去管理,下图我以名为lamp的容器为例说明:
容器管理基本如上图,展示的信息比较齐全,但是忽略了我们比较常用管理容器的方式之一,就是查看日志功能也就是cmd docker logs的展示,也少了连接到容器内部执行命令的可视化操作,也就是cmd docker exec 。当然在这个容器管理界面我没有发现任何和容器集群有关的信息,也就是说dockerui不能管理docker集群,只能管理单机的容器,这个痛点相当大。
继续容器网络管理界面
这个展示不错,可以看到互相之间存在通讯关系的容器。显示也算比较直观,好看。
再看看images管理界面。
界面好看,显示不错,带了pull的功能和搜索功能。大小,创建时间,镜像ID这些一个都不少。
最后还有一个info的选项,这个我就不介绍了,它就是显示了整台服务器的容器镜像的统计,服务器配置以及dockerui的相关版本信息而已,可以理解成然并卵的部分。
总结一下dockerui使用感受。
1.总体来说界面比较好看,干净简洁。
2.系统没有登录验证功能,其实也没必要添加,因为它只能管理本地单机的docker容器。没有批量管理功能。(这个很致命)
3.我们经常对容器的操作无非创建,交互执行命令,查看日志和查看健康状态。dockerui这方面功能不够全面,缺少了创建,交互执行命令以及查看日志的功能。(这个相当致命)
4.这个平台然并卵,你要管理容器还得需要从服务器里面操作。这个平台只能算是一个摆设的花瓶,看看而已。
===========不是很华丽的分割线====================
shipyard 官网地址:http://www.shipyard-project.com
部署方法,一样简单:
curl -sSL https://shipyard-project.com/deploy | bash -s 即可,当然你也可以逐个组件启动,不过要注意先后和link。下面有启动说明。
部署完成后查看一下到时跑了什么容器,如下图
解释一下:docker ps看到了一大堆,挺吓人的。现在说明一下,最新的shipyard集成了swarm管理,至于什么是swarm,这里就不多说了,可以去官网看下:https://docs.docker.com/swarm/ 我们只需要知道swarm是一个管理docker集群的工具就行,它分为swarm-manager和swarm-agent,可以理解成为主和仆的关系。
shipyard-swarm-agent swarm agent 插件,允许节点去调度容器。(这个是shipyard批量管理节点容器的关键点)
启动命令:docker run -ti -d –restart=always –name shipyard-swarm-agent swarm:latest join –addr
shipyard-swarm-manager swarm manager 管理
启动命令是:docker run -ti -d –restart=always –name shipyard-swarm-manager swarm:latest \manage –host tcp://0.0.0.0:3375 etcd://
shipyard-proxy 默认情况下docker服务只监听一个端口,我们重新配置docker可以使用TLS就必须要启动多一个proxy用于报文转发。TLS是什么?TLS是安全层传输协议,用于在两个通信应用程序之间提供保密性和数据完整性的。
启动命令是:docker run -ti -d -p 2375:2375 –hostname=$HOSTNAME –restart=always –name shipyard-proxy -v /var/run/docker.sock:/var/run/docker.sock -e PORT=2375 ehazlett/docker-proxy:latest
shipyard-certs 这个东东是整个shipyard系统中允许支持TLS的组件,我是这样理解的。
启动命令:docker run -ti -d –name shipyard-certs alpine:latest
shipyard-controller 可以理解成shipyard的控制程序吧,启动停止shipyard。
启动命令是:docker run -ti -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
shipyard-discovery 用于授权swarm manage选举,用etcd存储swarm容器对用的key和values。etcd是什么这里也不多介绍了,感兴趣可以私下看。etcd是一个高可用的key-values存储系统。
启动命令是:docker run -ti -d -p 4001:4001 -p 7001:7001 –restart=always –name shipyard-discovery microbox/etcd -name discovery
shipyard-rethinkdb shipyard数据存储
启动命令是:docker run -ti -d –restart=always –name shipyard-rethinkdb rethinkdb
上面把shipyard相关的组件都清楚的说明了一轮,现在开始介绍管理界面,从docker ps看出shipyard映射出来的端口是8080,因此访问它的界面是http://ip:8080 安装完毕后有用户名和密码提示的,用户名是admin密码是shipyard(当然这个是可以在进入管理平台后修改的)。
登录进去界面如上,界面也是十分好看的,导航栏分别是容器(默认首页),镜像,节点,仓库,以及用户管理和操作日志。
容器管理界面一目了然,容器健康情况,容器ID,容器在哪个节点启动,容器名称,启动的镜像,运行时长,创建时间都十分明了。留意一下左上角的刷新按钮,右边多了一个创建按钮,说明了shipyard支持创建容器,以下是创建的界面。
创建容器的界面功能选择非常多,可以在这里定义容器的主机名,容器需要挂载本地的目录情况,端口映射,cpu和内存限制等等,这里都可以选择。可见shipyard将docker run这个命令可以带的参数基本都封装到了web上,这点非常好。
下面继续看下容器界面右边action的两个选项,分别是一个放大镜形状的和扳手形状的。
扳手形状的功能是对容器的具体操作,启动,停止,删除,而且这里也包括了我们比较常用的健康监控(CPU,内存,可以查看5秒10秒30秒1分钟的图表),命令行console操作和查看日志的logs操作。这个十分人性化。
另外一个放大镜的选项是针对容器的具体信息页面如下:信息十分详细,包括挂载,端口映射,执行命令和容器里启动的进程信息一个不少。
下面看看管理镜像的界面:
images界面可以直接删除镜像和直接pull镜像。
管理节点的界面:
可以看出管理节点的界面标示了节点机器的主机名,IP地址,容器个数,已经资源使用情况等。
私有仓库界面,可以在页面添加自己的私有仓库,为什么要有私有仓库,这个之前在其他文章有说明,因为网络,因为,因为流量,因为便于管理。
剩下的用户管理界面和操作日志记录界面我就不多说了,一个是用于管理用户的(只能添加,删除不做权限分化管理)另外一个是操作日志记录(可以删除,里面详细说明了每一个针对容器和镜像的操作,以及是调用了哪个docker api操作的都有说明,十分详细)。
还补充一点,上面忘记说了,管理界面安装部署说了,但是如何添加节点呢?如下命令:
curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://10.0.1.10:4001bash -s
现在总结一下shipyard的使用感受:
1.shipyard是一个很强的docker管理系统,界面干净好看,很多功能想操作随手可得,大大节约了查找功能按钮的时间。
2.shipyard可以管理容器,镜像,私有仓库,这个针对docker的生态圈管理很全面。而且功能部分封装docker api用的很细致,如创建容器那里可以看出来,覆盖很全面了。而且操作容器最常用的那几个功能都齐全,创建删除容器,批量管理节点容器集群,执行命令,查看健康状态监控,以及看日志输出。
3.shipyard结合了swarm支持管理docker集群,不单单只管理本地的docker容器,这个很好。而且用shipyard创建容器会自动创建到资源相对消耗少的节点下面,这个显得很智能。
4.一定要挑选shipyard的不足,就是利用shipyard创建容器耗时相对来说耗时一点。(这个具体原因我也不清楚,总感觉比我在服务器里docker run慢,可能是调度选择空闲节点的时候需要耗时)
5.shipyard不能针对具体的节点创建容器,这个也算一个小小的不够完美。假如可以针对节点自己控制容器这样或许更加有利于我们部分对网络相连比较重要的项目。
6.shipyard少了针对容器之间网络管理的选项,假如可以集成pipwork管理容器网络那就更完美了。
经过了一周的使用,shipyard的优势是压倒性胜过dockerui的,而且好消息是shipyard是基于python django架构开发的,二次开发应该不难。
不说了,我得赶紧去把dockerui给删了。- -!!
个人分类: python
Docker 图形化管理提供了很多工具,有Portainer、Docker UI、Shipyard等等,本文主要介绍Portainer。
Portainer是一个开源、轻量级Docker管理用户界面,基于Docker API,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
2.1下载官方镜像
[root@ linuxidc /]# docker pull portainer/portainer
Using default tag: latest
latest: Pulling from portainer/portainer
d1e017099d17: Pull complete
ba5495c717cb: Pull complete
Digest: sha256:8146a5aae1135a0ccee424488c6867b438be21d1e915903a858d12e8382b817b
Status: Downloaded newer image for portainer/portainer:latest
2.2单机运行
如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即可启动容器,来管理该机器上的docker镜像、容器等数据。
创建数据卷:
[root@linuxidc ~]# docker volume create portainer_data
portainer_data
运行容器:
[root@linuxidc ~]# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
439cc8a6d44a84f5967534c50d3accc43fbeb578258a52c2683afeb230dd6e04
参数说明:
-d:容器在后台运行;
-p 9000:9000 :宿主机9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;
-v portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;
查看容器进程:
[root@linuxidc ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
439cc8a6d44a portainer/portainer "/portainer" 13 seconds ago Up 13 seconds 0.0.0.0:9000->9000/tcp amazing_clarke
访问服务:
单机版本选择“Local",点击Connect即可连接到本地docker,如下图:
注意:从上图可以看出,有提示需要挂载本地 /var/run/docker.socker与容器内的/var/run/docker.socker连接。因此,在启动时必须指定该挂载文件。
2.3集群运行
更多的情况下,我们会有一个docker集群,可能有几台机器,也可能有几十台机器,因此,进行集群管理就十分重要了,Portainer也支持集群管理,Portainer可以和Swarm一起来进行集群管理操作。首先要搭建了一个Swarm,本文不着重介绍swarm集群的安装。
portainer集群启动:
启动集群参考官方文档:https://portainer.io/install.html
$ docker service create \
--name portainer \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//opt/portainer,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock
启动Portainer之后,首页还是给admin用户设置密码(这里和单机启动一样)。
进入后,如下图所示会发现多了关于swarm的选项,其它配置和单机运行的portainer一样,都很简单:
官方网站:https://portainer.io/
官方文档:https://portainer.readthedocs.io/
演示网址:http://demo.portainer.io 账号admin 密码 tryportainer
更多Docker相关教程见以下内容:
Docker安装应用(CentOS 6.5_x64) https://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 16.04 服务器上配置使用 Docker https://www.linuxidc.com/Linux/2017-06/145176.htm
Ubuntu 15.04下安装Docker https://www.linuxidc.com/Linux/2015-07/120444.htm
Docker 安装实例 https://www.linuxidc.com/Linux/2017-04/142666.htm
Docker 创建基础镜像 https://www.linuxidc.com/Linux/2017-05/144112.htm
在 Ubuntu 15.04 上如何安装Docker及基本用法 https://www.linuxidc.com/Linux/2015-09/122885.htm
Ubuntu 16.04上Docker使用手记 https://www.linuxidc.com/Linux/2016-12/138490.htm
使用Docker分分钟启动常用应用 https://www.linuxidc.com/Linux/2017-04/142649.htm
Ubuntu 16.04下Docker修改配置文件不生效解决办法 https://www.linuxidc.com/Linux/2017-05/143862.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:https://www.linuxidc.com/Linux/2018-03/151307.htm