Glances Docker 镜像构建与运行指南:从 `make docker` 到多阶段 Dockerfile 全解析

发布时间:2026/9/19 14:15:54
Glances Docker 镜像构建与运行指南:从 `make docker` 到多阶段 Dockerfile 全解析
指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载Glances 官方仓库在docker-files/目录下维护了一套完整、可复现的容器化方案基于 Ubuntu 与 Alpine 两种发行版的多阶段 Dockerfile、配套的构建/运行 Makefile 目标、以及 Web/TUI 两种模式的 Docker Compose 编排。本文将围绕docker-files/README.md给出的核心工作流结合 Makefile、ubuntu.Dockerfile、alpine.Dockerfile 与 docker-compose.yml 等仓库文件完整讲解如何构建镜像、区分 minimal/full/dev 三种变体、注入配置并验证运行效果让你能够自主定制出适合自身监控场景的 Glances 容器镜像。一、快速上手官方推荐的两条命令docker-files/README.md将整个容器化工作流浓缩为两步# 1. 构建本地镜像 make docker # 2. 测试镜像以 Alpine dev 变体为例前台运行 make run-docker-alpine-dev第一条命令调用仓库根目录 Makefile 中的docker目标第二条命令则把刚构建好的镜像以交互式 TTY 方式跑起来验证容器内 Glances 能否正常启动并展示监控界面。虽然 README 正文极简但背后是仓库里一整套精心设计的构建体系下面逐层展开。前提条件Docker 已安装且带有Buildx插件。Makefile 在 Docker 小节明确注明 Need Docker Buildx package (apt install docker-buildx on Ubuntu)多阶段构建与--target选择正是依赖 Buildx 能力需要在仓库根目录执行make命令因为 Makefile 引用了conf/glances.conf、docker-files/、glances/、docker-compose/glances.conf等相对路径网络可达 Docker Hub基础镜像ubuntu、alpine需要拉取。二、Makefile 中的 Docker 目标体系Makefile 的 Docker 小节第 297323 行定义了完整的构建矩阵值得先读懂命名规则IMAGES_TYPES : full minimal DISTROS : alpine ubuntu alpine_images : $(IMAGES_TYPES:%docker-alpine-%) ubuntu_images : $(IMAGES_TYPES:%docker-ubuntu-%) DOCKER_IMAGES : $(alpine_images) $(ubuntu_images) DOCKER_RUNTIMES : $(DOCKER_IMAGES:%run-%) DOCKER_BUILD : docker buildx build DOCKER_RUN : docker run目标命名规律为docker-发行版-变体共四类镜像docker-alpine-full、docker-alpine-minimal、docker-ubuntu-full、docker-ubuntu-minimal。对应的构建规则使用模式化写法define MAKE_DOCKER_BUILD_RULES $($(DISTRO)_images): docker-$(DISTRO)-%: docker-files/$(DISTRO).Dockerfile $(DOCKER_BUILD) --target $$* -f $$ -t glances:local-$(DISTRO)-$$* . endef这里--target $*直接映射到 Dockerfile 中的构建阶段名full/minimal-t glances:local-distro-variant生成本地镜像标签例如glances:local-alpine-full。也就是说Make 目标使用的 Dockerfile构建阶段本地镜像标签make docker-alpine-fulldocker-files/alpine.Dockerfilefullglances:local-alpine-fullmake docker-alpine-minimaldocker-files/alpine.Dockerfileminimalglances:local-alpine-minimalmake docker-ubuntu-fulldocker-files/ubuntu.Dockerfilefullglances:local-ubuntu-fullmake docker-ubuntu-minimaldocker-files/ubuntu.Dockerfileminimalglances:local-ubuntu-minimalmake docker上述全部全部四个镜像运行目标同样成对出现$(DOCKER_RUNTIMES): run-docker-%: $(DOCKER_RUN) $(DOCKER_OPTS) $(DOCKER_SOCKS) -it glances:local-$*其中DOCKER_OPTS : --rm -e TZ${TZ} -e GLANCES_OPT --pid host --network host DOCKER_SOCKS : -v $(PODMAN_SOCK):$(PODMAN_SOCK):ro -v $(DOCKER_SOCK):$(DOCKER_SOCK):ro这条运行规则是理解 README 中make run-docker-alpine-dev行为的关键--rm容器退出即删除--pid host共享宿主机 PID 命名空间让 Glances 能看到宿主机全部进程进程监控的前提--network host使用宿主机网络网络接口统计与 Web 端口直接暴露挂载podman.sock与docker.sock只读供 containers 插件发现容器-e GLANCES_OPT通过环境变量向启动命令注入参数默认空串即标准控制台模式-e TZ${TZ}继承宿主机时区。run-docker-alpine-dev对应镜像glances:local-alpine-dev。需要说明的是常规make docker只构建full与minimal两种变体dev阶段在两个 Dockerfile 中均有定义标注 to be compatible with CI由 CI 或开发者按需通过docker buildx build --target dev单独构建其差异在下一节详述。三、多阶段 Dockerfile 深度解析docker-files/下提供两份 Dockerfileubuntu.Dockerfile基于 Debian 系与 alpine.Dockerfile基于 musl libc 的轻量发行版。两者结构完全同构均采用「基础层 → 构建层 → 发布层」的多阶段设计。3.1 版本参数化ARG 与 ENV 的取舍两份 Dockerfile 开头都通过ARG声明版本并附有明确警告版本必须显式设置WARNING: the versions should be set。Ubuntu 侧ARG IMAGE_VERSION26.04 ARG PYTHON_VERSION3.14Alpine 侧ARG IMAGE_VERSION3.24 ARG PYTHON_VERSION3.14文件注释还点出了 ARG/ENV 的设计原则ENV面向未来运行的容器ARG仅作用于构建过程ENV is for future running containers. ARG for building your Docker image。因此在发布阶段可以看到ENV PYTHON_VERSION${PYTHON_VERSION}将构建期参数固化进镜像供启动命令动态拼接 Python 解释器路径。Alpine 注释额外提醒Alpine 大版本与 Python 版本存在绑定关系if you change the Alpine version, you may have to change the Python version升级基础镜像时务必同步核对。3.2 阶段划分base → build → release以 ubuntu.Dockerfile 为例完整阶段拓扑如下base ──┬── build ──┬── buildminimal ──┐ │ └── buildfull ──┤ │ ├── release ──┬── minimal │ ├── full ── dev └────────────────────────────────────────────┘base 阶段安装运行 Glances 的底层系统依赖。Ubuntu 侧使用apt-get install -y --no-install-recommends安装python3、curl、lm-sensors、smartmontools、net-tools、tzdataAlpine 侧用apk add --no-cache安装等价的python3、curl、lm-sensors、smartmontools、iputils、tzdata。这些包分别支撑传感器插件lm-sensors、SMART 磁盘健康插件smartmontools、网络工具与时区处理。随后执行apt-get clean rm -rf /var/lib/apt/lists/*Alpine 依赖apk的--no-cache自动清理压缩镜像体积。build 阶段在 base 之上叠加编译工具链用于安装 Python 依赖。Ubuntu 侧额外安装python3-dev、python3-venv、python3-pip、python3-wheel、libzmq5、musl-dev、build-essentialAlpine 侧则安装python3-dev、py3-pip、py3-wheel、musl-dev、linux-headers、build-base、libzmq、zeromq-dev以及为编译cryptographycassandra-driver 的可选依赖准备的git、gcc、cargo、pkgconfig、libffi-dev、openssl-dev、cmakecmake 对应 issue #2735 的修复。随后创建 Python 虚拟环境并复制依赖清单RUN python3 -m venv --without-pip venv COPY pyproject.toml docker-requirements.txt all-requirements.txt ./buildminimal / buildfull 阶段分别按docker-requirements.txt与all-requirements.txt安装依赖并直接装入虚拟环境 site-packagesRUN python3 -m pip install --target/venv/lib/python${PYTHON_VERSION}/site-packages \ -r docker-requirements.txt两个依赖清单的差异正是 minimal/full 镜像的本质区别docker-requirements.txt对应 minimal 变体头注释显示它由uv export --extra containers --extra web --extra mcp自动生成即仅包含容器插件docker/podman/pylxd、Web 服务FastAPI/uvicorn与 MCP 支持所需的依赖all-requirements.txt对应 full 变体覆盖全部可选导出与插件依赖InfluxDB、Kafka、MQTT、Prometheus、Cassandra 等。release 阶段组装运行时镜像两份 Dockerfile 完全一致COPY ./docker-compose/glances.conf /etc/glances/glances.conf COPY ./glances/. /app/glances/ COPY docker-bin.sh /usr/local/bin/glances RUN chmod ax /usr/local/bin/glances ENV PATH/venv/bin:$PATH EXPOSE 61209 61208关键点默认配置文件取自 docker-compose/glances.conf安装到/etc/glances/glances.confGlances 源码整体复制到/app/glances/docker-bin.sh作为入口脚本安装到/usr/local/bin/glances对应仓库根目录 docker-bin.sh暴露两个端口61208WebUI/XMLRPC与 61209XMLRPC与EXPOSE 61209 61208注释一致创建 glances 用户的步骤被注释掉并注明原因若使用非 root 用户Glances Docker 插件将无法工作If used, the Glances Docker plugin do not work因为访问 docker.sock 需要相应权限。启动命令是理解镜像行为的关键一行CMD [/bin/sh, -c, /venv/bin/python${PYTHON_VERSION} -m glances ${GLANCES_OPT}]即容器启动时执行python -m glances并把环境变量GLANCES_OPT的内容追加为命令行参数。这就是所有 docker run / compose 示例中通过-e GLANCES_OPT-w切换运行模式的原理所在。3.3 三个发布变体minimal、full、devminimalCOPY --frombuildminimal /venv /venv只带容器/Web/MCP 必需依赖镜像最小full先安装运行时依赖Ubuntu 侧libzmq5、libvirt-clientsAlpine 侧libzmq、libvirt-client支撑 QEMU/libvirt/KVM 的 vms 插件再COPY --frombuildfull /venv /venv依赖最全dev基于full额外复制 docker-files/docker-logger.json 为/app/docker-logger.json并设置ENV LOG_CFG/app/docker-logger.json。该 JSON 把 root logger 级别设为 INFO、handler 指向 consolelogging.StreamHandler即所有日志统一转发到 stdout便于 CI 与容器日志采集。dev 阶段主要用于开发与 CI 验证并非面向生产的最小化产物。Alpine 的 buildfull 阶段还额外设置了两个 ARG体现对原生依赖编译问题的针对性处理ARG CASS_DRIVER_NO_CYTHON1 # 绕过 cassandra-driver 的 Cython 编译问题 ARG CARGO_NET_GIT_FETCH_WITH_CLItrue # 解决 Rust crates 拉取问题issue 2368四、运行验证从控制台到 Web 模式4.1 控制台模式构建完成后直接前台运行make run-docker-alpine-dev # 等价于 docker run --rm -e TZ${TZ} -e GLANCES_OPT \ -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --pid host --network host -it glances:local-alpine-dev在支持 TUI 的终端中你将看到 Glances 经典的彩色监控界面CPU、内存、负载、网络、进程列表等。由于启用了--pid host与--network host展示的是宿主机的进程与网络状态而非容器自身——这正是自监控类容器推荐的标准姿势。4.2 Web 模式与健康检查如需部署为 Web 监控服务仓库在 docker-compose/docker-compose.yml 给出了生产化的 compose 编排对应latest-full镜像services: glances: image: nicolargo/glances:latest-full restart: always healthcheck: test: [CMD, curl, -f, http://localhost:61208/api/4/status] interval: 30s timeout: 10s retries: 3 start_period: 40s pid: host network_mode: host read_only: true privileged: false volumes: - /:/rootfs:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro - ./glances.conf:/glances/conf/glances.conf tmpfs: - /tmp environment: - GLANCES_OPT-C /glances/conf/glances.conf -w --enable-mcp --enable-plugin smart - TZEurope/Paris - PYTHONPYCACHEPREFIX/tmp/py_caches这份配置体现了完整的部署智慧健康检查每 30s 用 curl 探测 REST API/api/4/statusstart_period: 40s给足启动预热时间只读根文件系统read_only: true提升安全性配合tmpfs: /tmp承载运行时写入并配合PYTHONPYCACHEPREFIX/tmp/py_caches把 Python 字节码缓存也移到内存挂载/:/rootfs:ro让 fs 插件读取宿主机根文件系统统计自定义配置宿主机./glances.conf挂载到容器内/glances/conf/glances.conf配合GLANCES_OPT中的-C指定加载GLANCES_OPT 组合-w启动 Web 服务、--enable-mcp开启 MCP 支持、--enable-plugin smart启用 SMART 磁盘健康插件TZ 时区TZEurope/Paris可按需替换或引用宿主机${TZ}环境变量。针对磁盘健康监控注释中提示按需放开# cap_add: # - SYS_RAWIO # SATA smartctl 监控 # - SYS_ADMIN # NVME smartctl 监控 # devices: # - /dev/nvme0若使用 QEMU/libvirt/KVM 的 vms 插件还可取消挂载 libvirt socket 的注释modular 与 monolithic 两种 daemon 各有对应路径。4.3 TUI 模式编排若希望容器直接呈现交互式控制台仓库另提供 docker-compose/docker-compose-tui.yml其与 Web 版的关键差异是stdin_open: true tty: true environment: - GLANCES_OPT-C /glances/conf/glances.conf通过stdin_open/tty保留终端交互能力且不注入-w从而以纯 TUI 模式启动其余pid: host、network_mode: host、只读根文件系统等安全与可见性配置保持一致。五、自定义配置与常见玩法5.1 挂载自定义 glances.conf不修改镜像即可替换配置官方 docs/docker.rst 给出了两种方式compose 卷挂载推荐如上一节所示./glances.conf:/glances/conf/glances.confdocker run 挂载镜像默认配置位于/etc/glances/glances.conf可以docker run -v $(pwd)/glances.conf:/etc/glances/glances.conf \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro \ --pid host -it docker.io/nicolargo/glances5.2 显示宿主机系统信息容器默认在 UI 顶部显示容器自身的 OS 信息来自容器内 /etc/os-release。如需显示宿主机发行版信息挂载宿主文件覆盖即可docker run -v /etc/os-release:/etc/os-release:ro docker.io/nicolargo/glancescompose 中对应注释行# - /etc/os-release:/etc/os-release:ro同理。5.3 用登录口令保护 Web 服务容器内 Web/XMLRPC 服务可通过口令保护docs/docker.rst 提供了两种方案方案一生成密码文件并作为 Docker secret 注入# 进入运行中的容器 docker exec -it glances_docker sh # 生成密码文件默认用户名 glances可用 --username 修改 glances -w --password # Web 模式服务器模式用 glances -s --password # 按提示输入密码并确认保存后CTRLC 退出再 exit 离开容器 # 将密码文件拷回宿主机 docker cp glances_docker:/root/.config/glances/glances.pwd ./secrets/glances_password随后在 compose 中以 secret 方式注入docker-compose/docker-compose.yml 中已预留对应注释块services: glances: environment: - GLANCES_OPT-w --password secrets: - source: glances_password target: /root/.config/glances/glances.pwd secrets: glances_password: file: ./secrets/glances_password方案二在配置文件的[passwords]段声明[passwords] # Syntax: hostpassword localhostmylocalhostpassword defaultmydefaultpassword5.4 GPU 支持NVIDIAfull 变体镜像支持 GPU 插件docker-compose/docker-compose.yml 中已注释好deploy块deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]docker run 场景则在镜像名前加入--gpus参数注意位置必须在镜像名之前。六、镜像变体与官方标签对照仓库同时提供开箱即用的 Docker Hub 镜像docs/docker.rst 中有完整标签表与本地构建体系一一对应镜像标签操作系统目标依赖latest-fullAlpine最新发布版全部依赖latestAlpine最新发布版minimal FastAPI DockerdevAlpinedevelop 分支全部依赖ubuntu-latest-fullUbuntu最新发布版全部依赖ubuntu-latestUbuntu最新发布版minimal FastAPI Dockerubuntu-devUbuntudevelop 分支全部依赖注意含dev的标签直接指向develop分支可能不稳定。镜像拉取示例docker pull nicolargo/glances:latest七、小结从docker-files/README.md的两条命令出发可以梳理出 Glances 容器化的完整技术脉络构建make docker借助 Makefile 模式化规则驱动docker buildx build --target variant生成glances:local-distro-variant本地镜像变体多阶段 Dockerfile 通过base → build → release拓扑产出 minimal容器/Web/MCP 依赖、full全量依赖、devfull stdout 日志供 CI三种镜像运行CMD以python -m glances ${GLANCES_OPT}启动GLANCES_OPT环境变量成为切换 Web/TUI/MCP/SMART 等模式的统一入口生产化仓库提供的 compose 编排整合了健康检查、--pid host/--network host可见性、只读文件系统、自定义配置挂载与口令保护等最佳实践。如需继续深入可依次阅读 ubuntu.Dockerfile、alpine.Dockerfile、Makefile 的 Docker 小节、docker-compose.yml、docker-compose-tui.yml以及官方容器说明 docs/docker.rst从而将这套构建体系迁移到自己的 CI 流水线或监控基础设施中。赞分享指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载相关推荐PersonaPlex浏览器兼容性指南麦克风权限、WebSocket与采样率PersonaPlex浏览器兼容性指南麦克风权限、WebSocket与采样率 PersonaPlex 是一款在浏览器中运行的 实时全双工语音对话 AI 通过人工智能语音大模型模型推理服务本地部署OpCore-Simplify5分钟快速上手的黑苹果OpenCore终极配置工具OpCore Simplify5分钟快速上手的黑苹果OpenCore终极配置工具 还在为复杂的OpenCore配置而头疼吗每次搭建黑苹果系统都要手动修改几十开发工具CLImitmproxy Docker 镜像构建与容器化运行实战从本地 wheel 到多阶段镜像与权限管理mitmproxy Docker 镜像构建与容器化运行实战从本地 wheel 到多阶段镜像与权限管理 mitmproxy 是一个面向渗透测试者与开发者的交互式网络安全网络开发工具接口测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考