GUI Docker 的探索
Docker 功能强大,但界面不够美观;让我们尝试改进这一点。本文概述了一些适用于 Docker 的 GUI 选项。
我喜欢 Docker。起初,对于像我的家庭环境这样的小规模部署,它似乎有点傻,但在学习如何使用它之后,我爱上了它。标准功能当然很有益。不必担心一个应用程序的依赖项会踩到或与另一个应用程序的依赖项冲突,这真是太好了。但是大多数应用程序在与其它程序良好协作方面都做得很好,并且软件包管理系统也使一切井然有序。那么,为什么我使用 docker run
而不是 apt-get install
呢?个性化的系统设置。
使用 Docker,我可以并排运行三个相同的应用程序。它们甚至可以使用相同的端口(在内部)而不会冲突。我的 BT 下载客户端可以置于强制 VPN 网络中,而我无需担心它会以某种方式“泄露”我的个人 IP 数据。 甚至,我可以在我的 Ubuntu Docker 服务器中运行仅在 CentOS 上运行的应用程序,而且它就是可以工作!简而言之,Docker 太棒了。
我只是希望我能记住所有命令。
别误会,我很熟悉 Docker。我的大多数服务器需求都使用它。测试新应用程序时,它是我首选的工具。甚至,我还在 CBT Nuggets(我的日常工作)上讲授了关于 Docker 的完整课程。问题是,Docker 工作得太好了,我很少需要与它交互。因此,我的 FIFO 缓冲区满了,我忘记了使 Docker 工作的简单命令行选项。而且,因为我喜欢图表,所以我决定安装一个 Docker GUI。这有点像冒险,所以我认为我应该分享我的经验的来龙去脉。
我对 GUI 的期望对于 GUI,有些东西我并不真正在意。奇怪的是,人们使用可视化界面的最常见用途之一是创建 Docker 容器。实际上,当我创建容器时,我并不介意使用命令行,因为它通常需要 5-10 次尝试和调整才能使其达到我想要的效果。所以对我而言,我希望至少具有以下功能:
- 所有容器的可视化布局,无论它们是否正在运行。
- 一种启动/停止/删除容器的方法。
- 能够重命名正在运行的容器,因为我总是忘记命名它们,而且我厌倦了看到容器名称为“chubby_cheetah”。
- 一种轻松更改重启策略的方法,这样当我最终正确设置容器后,我可以将其设置为
--restart=always
。 - 显示有关系统和各个容器的一些统计信息。
- 读取日志。
- 通过 Web 界面工作,以便我可以远程使用它。
- 本身就是一个 Docker 容器!
我的需求清单相当简单,但奇怪的是,许多 GUI 都不能满足我的要求。由于每个人的需求都不同,我将介绍我尝试过的最流行的选项,并提及一些优点和缺点。
Kitematic它有一个奇怪的名字,但 Kitematic 已经存在很长时间了。它实际上已被 Docker 官方采用,现在是 Docker Toolkit 的一部分。它是一个相当简单的界面,但简单有时也是一种优势,因为很容易找到它可以做的事情。
如果您查看 Kitematic 网站,您可能会认为它仅在 OS X 或 Windows 上运行,但值得庆幸的是,事实并非如此。如果您前往 GitHub 仓库,您还会找到 Ubuntu 安装程序。
Kitematic 非常漂亮,但它是一个原生应用程序,而不是 Web 界面。它看起来不错(图 1),但我经常在别人的电脑上外出,所以我的基于 Web 的需求非常重要。不过,如果您不需要 Web 界面并且想要一个受支持的、简洁的 GUI,Kitematic 非常出色。它相当简单,但再说一次,这并不是一件坏事。

图 1. Kitematic 看起来非常漂亮,但不幸的是,它是一个原生的非 Web 应用程序(图片来自 kitematic.com)。
优点
- 由 Docker 官方支持。
- 非常清晰和简单的界面。
缺点
- 不是 Web 应用程序。
DockStation 是另一个非基于 Web 的解决方案,但我想提及它,因为它非常强大。它有一个很棒、简洁的界面(图 2),但同样,它需要在本地计算机上安装。它确实支持通过 SSH 访问远程 Docker 服务器,但这仍然意味着在本地安装应用程序,并且配置并不简单。

图 2. DockStation 看起来也很棒,但它是专有的,并且需要大量工作才能使其工作。而且,它不是基于 Web 的(图片来自 dockstation.io)。
此外,DockStation 是闭源的。单凭这一点对我来说不会是决定性因素,但如果再加上原生应用程序安装的挫败感,就足以让我放弃它。不过,它对于个人使用是免费的,特别是如果您是开发人员,DockStation 可能会非常有吸引力。如果您想查看,网站上有很多屏幕截图。
优点
缺点
- 不是开源的。
- 不是基于 Web 的。
我发现最接近完美解决方案的是 Portainer。它是基于 Web 的,作为 Docker 容器运行,并且很容易上手。从表面上看,它似乎相当基本,但我印象深刻地看到甚至有一个分层用户系统,这意味着您可以为不同的用户提供不同级别的 Docker 基础设施访问权限。
Portainer 似乎不保留历史性能统计信息,但它确实有一个实时监视器(图 3),如果我试图排除行为不端的容器的故障,它可以应急使用。我有点惊讶地发现,应用程序模板功能(图 4)是我最喜欢玩的功能之一。我知道我最初的要求不包括快速部署容器的方式,但是抓取一个快速模板并单击部署非常简单,而且我发现自己更频繁地玩容器了。通过命令行部署容器并不难,但需要输入很多内容;而使用 Portainer,我只需单击“部署”,一切就都为我完成了。这似乎很傻,但是任何能让我玩技术的都是好事。

图 3. 我喜欢看图表,如果容器行为不佳,这种实时查看性能非常有用。

图 4. 我通常不喜欢这样的模板,但在这里我感觉自己像个在糖果店的孩子!
如果您想要一个相当简单的界面来与正在运行的 Docker 服务器交互,Portainer 是很棒的。它可以启动和停止容器,编辑现有的正在运行的应用程序(甚至重命名它们,这是我总是必须做的事情),并且它是清理会话后添加/删除镜像的系统的好方法。例如,您可以查看卷选项卡(图 5)并快速识别不再与正在运行的容器关联的卷。这是我从未考虑过的事情,所以我有很多废弃的卷只是放在那里。

图 5. 并不是说废弃的卷占用了我系统上的大量空间,但我讨厌留下东西乱放。Portainer 使清理变得容易。
我与正在运行的容器交互的首选系统是 Portainer。它可以在紧急情况下满足我的需求,通过 Web 浏览器运行,并且它具有足够的功能,值得保留。它是开源的,并且正在积极开发中。我强烈推荐它。实际上,Portainer 最好的事情之一是它非常容易设置。以下单行命令将下载镜像,启动容器,并让您访问端口 9000 上的界面:
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer
我不会将它暴露在互联网上,但是当我在外面时,一个快速的 ssh
命令和一个端口转发可以让我完全访问 Portainer 实例。由于 UNIX 套接字系统,Portainer 直接与 Docker 交互,并且无需进行任何系统配置更改即可完成任务。上面的单行命令确实是所有需要的。(对我而言,GUI 中的第一件事是更改容器的名称,因为我在创建容器时总是忘记这样做!)
Portainer.io 的工作人员在此处提供了一个功能齐全的演示 here (登录名是 admin:tryportainer),它将让您了解它可以做什么,而无需在您自己的环境中部署它。我承认,我在让演示工作方面运气不佳(它经常卡住),因此在您自己的系统上启动一个快速容器并进行检查可能会更容易。不过,提供演示是很好的。
优点
- 基于 Web。
- 设置简单(它在容器中运行)。
- 易于导航。
- 用户管理。
缺点
- 找不到如何更改容器上的重启策略!
如果我不提及另一个有趣的选项,我将有所疏忽,它在技术上是一个 GUI,尽管不是传统意义上的 GUI。Dockly 是一个 GUI,但它是一个基于 Curses 的文本 GUI。基本上,如果 Kyle Rankin 正在寻找 Docker 的 GUI 界面,Dockly 可能是他的首选。甚至,它看起来有点像 Mutt(图 6)。

图 6. Dockly 不是 Docker 最漂亮的 GUI,但它确实完成了其他 GUI 大部分相同的事情,并且它完全在终端窗口内运行。值得一看。
诚然,最初通过键盘导航 GUI 有点麻烦。我花了一段时间才体会到 Dockly 真正能做什么。但是,一旦我习惯了界面,我必须承认它非常不错。在所有管理系统中,它绝对是最容易连接的,因为它在 SSH 窗口中运行。
有关如何设置和使用 Dockly 的说明,请访问 GitHub 页面。它使用 node.js,这在过去一直是我的问题,因为它与版本冲突有关。但是由于这是 Docker,它当然可以在自己的容器中运行,以确保它具有所需的精确版本。
优点
- 从容器运行。
- 易于设置。
- Kyle Rankin 友好型(仅限终端窗口)。
缺点
- 修改容器的能力有限。
您知道有时候您在互联网上搜索某个演员的名字,然后三个小时后发现自己正在观看 YouTube 上猫被黄瓜吓到的视频吗?嗯,我对 Docker GUI 界面的深入研究有点像那样。Portainer 是我最早尝试的之一,结果它是最好的。尽管如此,我还是花了五个多小时安装和配置各种 GUI,从现在已失效的“Shipyard”到极其先进的“Rancher”。许多是原生应用程序,一些需要本地安装额外的 VM 才能运行,并且大多数都比我想要的更复杂。
我真的希望 Kitematic 是一个基于 Web 的 GUI,因为它与 Docker 的集成很好,而且其简洁的外观使其易于管理简单的基础设施。如果您一直都在同一台计算机上,那么查看原生 GUI 选项可能值得您花时间。最后,即使我运行了 Portainer 和 Dockly,我实际上发现自己 ssh
进入我的 Docker 服务器并手动运行命令。这可能很麻烦,而且我并不总是记得特定的参数。不过,在 Google 上搜索答案与登录 GUI 一样容易。
但是图表——图表看起来真不错!