Fleet

[!TIP]

这个工具可能更适合镜像维护者使用,可以通过这篇文章进行了解。对于个人家庭用户来说可能用处并不是很大。LinuxServer的fleet:https://fleet.linuxserver.io

Fleet是一个基于web的镜像管理工具,适用于需要发布、管理大量Docker镜像的组织(个人)。


Fleet如何工作

Fleet将Docker镜像的快照存储在数据库中,该快照由仓库所有者和用户镜像的元数据组成。它将会在设定的时间间隔内与Docker Hub同步,以更新其存储的数据。

然后,它将快照数据以列表的形式显示在状态页面上,其中包含仓库和镜像的链接。管理者还可以为每个镜像设置稳定不稳定两个状态。这将帮助用户快速了解每个镜像的当前的状态。

为什么是快照?

简单说,Docker Hub提供的API非常慢,所以代理来自Docker Hub的数据并不是好的解决方案。通过将数据缓存在自己的数据库中,Fleet能更有效地展示每个镜像的状态。除此之外,它还可以在一条响应中提供如镜像版本等信息,而不用用户进行多次请求。

以下是通过Docker Hub和Fleet获取所有LinuxServer镜像的名称、拉取、版本信息的比较:

API 时间(毫秒)
Docker Hub(多次请求) 52000毫秒
Fleet 50毫秒

属性

Fleet可以在应用的主页上显示镜像的状态(下列)等相关信息。

隐藏

如果镜像被隐藏,它将不会显示在列表中,也不会在API接口中返回任何信息,当然也不会包括统计该镜像的拉取次数。

不稳定

如果维护者发现镜像的某些问题,可以将其标记为不稳定状态。如果最新的版本(或其他版本)引起了下游损坏,那么也将标记给镜像。如果上游依赖或应用程序导致惊险个损坏,也将被标记出来。

弃用

如果镜像的维护者或者上游应用程序不在提供支持,或者镜像已经到达使用寿命(或已被其他镜像取代),则将惊险个标记为已弃用,以用来让用户知道这一消息,并应该停止使用它。


API

Fleet提供了一个API接口,可用于获取镜像列表以及相关镜像的信息。

获取所有仓库和镜像

  1. https://fleet.linuxserver.io/api/v1/images

返回所有同步的镜像。

响应:

  1. {
  2. "status": "OK",
  3. "data" {
  4. "totalPullCount": 1862494227,
  5. "repositories": {
  6. "lsiobase": [
  7. {
  8. "name": "alpine",
  9. "pullCount": 4275970,
  10. "version": "3.6",
  11. "stable": true
  12. },
  13. {
  14. "name": "alpine.arm64",
  15. "pullCount": 66234,
  16. "version": "edge",
  17. "stable": true
  18. },
  19. ...
  20. ],
  21. "linuxserver": [
  22. {
  23. "name": "airsonic",
  24. "pullCount": 4608329,
  25. "version": "v10.2.1",
  26. "stable": true
  27. },
  28. {
  29. "name": "apache",
  30. "pullCount": 3011699,
  31. "version": "latest",
  32. "stable": true
  33. },
  34. ...
  35. ]
  36. ...
  37. }
  38. }
  39. }

[!NOTE]

任何未与Docker Hub同步的仓库都不会作为API的一部分返回,这也包括被隐藏的镜像。


部署Fleet

[!NOTE]

Fleet是一个Java应用,至少需要JRE 11。

从GitHub获取Fleet的最新版本。

SQL

Fleet将数据存储在MariaDB上。你可以使用下面的命令创建给Fleet使用的数据库:

  1. CREATE SCHEMA `fleet`;
  2. CREATE USER 'fleet_user' IDENTIFIED BY 'supersecretpassword';
  3. GRANT ALL ON `fleet`.* TO 'fleet_user';

数据库的账号密码也是Fleet配置信息的一部分。

配置文件

Fleet在运行时将通过加载 fleet.properties 文件来获取所有配置。它可以位于任何位置,并通过Runtime参数加载:

  1. # Runtime
  2. fleet.app.port=8080
  3. # Database Connectivity
  4. fleet.database.driver=org.mariadb.jdbc.Driver
  5. fleet.database.url=jdbc:mariadb://<IP_OR_URL>:3306/fleet
  6. fleet.database.username=<fleet_sql_user>
  7. fleet.database.password=<fleet_sql_password>
  8. # Password security
  9. fleet.admin.secret=<a_random_string>

可以通过文件、JVM参数或系统环境变量来加载所有配置。Fleet将首先查找配置文件,然后是JVM参数最后才是系统环境变量。在加载时,它只加载第一个值,这在方需要覆盖特定属性时很有用。

[!NOTE]

由于BASH环境的限制,如果将配置放在系统环境变量中,请将配置的属性名中的 . 替换为 _ ,并且变量中不能包含该字符。如,fleet.app.port=8080 应该改为 export fleet_app_port=8080

属性名 说明
fleet.app.port 程序将在这个端口下运行。
fleet.admin.secret 一个字符串,作为密码加密的一部分。这个密钥将进一步增强哈希密码的随机性。一旦创建,请勿修改!因为它也同步在密码验证时使用,如果Fleet重启后此属性被删除或修改,所有的密码验证将失败,因为密码都是用之前的密钥进行的加密。
fleet.database.driver 连接Fleet的数据库的驱动,应该是 org.mariadb.jdbc.Driver
fleet.database.url 连接数据库的 JDBC 链接
fleet.database.username 可以管理Fleet数据库的用户名,这个用户需要有Fleet数据库的所有权限,当然也可以有其他数据库的权限。
fleet.database.password 数据库的用户的密码

Runtime参数

除基本配置文件外,Fleet还通过 -D 来支持一些Runtime参数。这些可以用于Fleet以特定的方式运行。

[!NOTE]

这些参数与上面的不同,只能通过JVM参数(-D)使用。

例:java -Dfleet.config.base="/fleet/" -jar fleet-2.1.1.jar

Runtime参数 说明
fleet.config.base 配置文件的绝对路径,确切说是fleet工作目录的绝对路径,目录下包括fleet.properties文件
fleet.show.passwords 在日志中显示明文密码。不推荐
fleet.nuke.database 【注意】将完全擦出并重建Fleet数据库。如果Fleet数据库与Docker Hub相差太多或者镜像显示错误,可以使用这个参数来解决。
fleet.skip.sync.on.startup 默认情况下,Fleet首次运行时将执行同步。如果设置了次参数,第一次运行时将跳过同步,在设置的时间间隔后进行同步。

默认用户

首次启动Fleet时,它将创建一个默认用户,可以用这个用户登录进行管理并同步仓库和镜像。

默认用户和密码为:

用户名:admin

密码:admin

[!WARNING]

你应该尽快修改该用户的默认密码!可以通过 Admin -> User 菜单去修改。