1. 概述
本文介绍通过官方Docker镜像安装Grafana。具体来说,它涵盖了通过Docker命令行界面(CLI)和docker-compose
运行Grafana。
Grafana Docker镜像有两个版本:
- Grafana Enterprise: grafana/grafana-enterprise
- Grafana开源版: grafana/grafana-oss
推荐直接使用Grafana Enterprise默认版本。因为它是免费的,包含了所有OSS(开源)版本的功能。此外,还可以选择升级到完整的企业功能集,其中包括对企业插件的支持。
2. Grafana容器的基本用法
2.1 通过Docker CLI运行Grafana
本节将展示如何使用Docker CLI运行Grafana。要运行最新稳定版本的Grafana,请运行以下命令:
docker run -d -p 3000:3000 --name=grafana grafana/grafana-enterprise
如需停止Grafana容器,则使用docker stop,就像其它任何docker容器用法一样:
docker stop grafana
这里,我们通过容器名grafana
来操作,是因为我们实例化容器(run
)时,通过--name=grafana
指定了容器名为grafana
。因此下次你需要启动时,可以继续使用此名称来启动grafana
容器:
docker start grafana
2.2 保存Grafana数据
默认情况下,Grafana使用嵌入式 SQLite3 数据库来存储配置、用户、仪表板和其他数据。当你将Docker镜像作为容器运行时,对这些Grafana数据的更改将写入容器内的文件系统,该文件系统只会在容器存在时持续存在。如果停止并删除容器,任何文件系统更改(即Grafana数据)都将被丢弃。为避免丢失数据,你可以使用 Docker卷 或绑定挂载为容器设置持久存储。
2.2.1 使用Docker卷
如果希望Docker引擎管理存储卷时,请使用Docker卷。要使用Docker卷进行持久存储,请完成以下步骤:
- 创建一个Docker卷供Grafana容器使用,并为其指定一个描述性名称(例如
grafana-storage
)。运行以下命令:
docker volume create grafana-storage
2.2.2 使用绑定挂载
如果计划在Docker中运行Grafana时将主机上的目录用于数据库或配置,则必须使用具有访问和写入映射目录权限的用户启动容器。
要使用绑定挂载,请运行以下命令:
mkdir data docker run -d -p 3000:3000 --name=grafana \ --user "$(id -u)" \ --volume "$PWD/data:/var/lib/grafana" \ grafana/grafana-enterprise
2.3 Grafana环境变量
就像使用MySQL官方镜像,使用Grafana也支持使用环境变量指定某些自定义配置设置。例如:
docker run -d -p 3000:3000 --name=grafana \ -e "GF_LOG_LEVEL=debug" \ grafana/grafana-enterprise
3. 在Grafana容器中安装插件
你可以从官方和社区插件页面或使用自定义URL安装Grafana中的插件以安装私有插件。这些插件允许你添加新的可视化类型、数据源和应用程序,以更好地可视化数据。
Grafana目前支持三种类型的插件:面板、数据源 和 应用程序。
3.1 安装步骤
要在Docker容器中安装插件,请完成以下步骤:
- 将要安装的插件作为逗号分隔列表传递给带有
GF_INSTALL_PLUGINS
环境变量的Docker。这会在Grafana启动时将每个插件名称发送到grafana-cli plugins install ${plugin}
并安装它们。例如:
docker run -d -p 3000:3000 --name=grafana \ -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \ grafana/grafana-enterprise
- 要指定插件的版本,请将版本号添加到
GF_INSTALL_PLUGINS
环境变量。例如:
docker run -d -p 3000:3000 --name=grafana \ -e "GF_INSTALL_PLUGINS=grafana-clock-panel 1.0.1" \ grafana/grafana-enterprise
着你如果你不指定版本号,将默认使用最新版本。
- 要从自定义URL安装插件,请使用以下约定指定URL:
;
。例如:
docker run -d -p 3000:3000 --name=grafana \ -e "GF_INSTALL_PLUGINS=https://github.com/VolkovLabs/custom-plugin.zip;custom-plugin" \ grafana/grafana-enterprise
以下示例运行最新稳定版本的Grafana,监听端口3000,容器名为grafana
,在grafana-storage
docker卷中持久存储,设置服务器根URL,并安装官方时钟面板插件。
docker volume create grafana-storage docker run -d -p 3000:3000 --name=grafana \ --volume grafana-storage:/var/lib/grafana \ -e "GF_SERVER_ROOT_URL=http://my.grafana.server/" \ -e "GF_INSTALL_PLUGINS=grafana-clock-panel" \ grafana/grafana-enterprise
4. 通过Docker Compose运行Grafana
实际项目中,更加常用的不是通过命令,而是是使用Docker Compose来定义和共享由多个容器组成的应用程序。通过编写YAML文件(docker-compose.yaml),列出了组成应用程序的所有服务。然后可以使用单个命令以正确的顺序启动容器,并使用另一个命令关闭它们。
4.1 运行最新稳定版Grafana
本节展示如何使用Docker Compose运行Grafana。本节中的示例使用Compose版本3。
要使用Docker Compose运行最新稳定版本的Grafana,请完成以下步骤:
- 创建一个
docker-compose.yaml
文件。 - 将以下代码添加到
docker-compose.yaml
文件中。例如:
version: "3.8" services: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped ports: - '3000:3000'
- 要运行
docker-compose.yaml
,请运行以下命令:
docker compose up -d
其中,d表示分离模式,up表示启动容器并运行。在Docker Compose中,要停止Grafana容器,需要使用down
命令:
docker compose down
4.2 持久化数据
与之前类似,我们可以使用Docker卷或绑定挂载为容器设置持久存储,以避免丢失数据。
4.2.1 使用Docker卷
现在我们先创建一个docker-compose.yaml文件,并将以下代码添加到docker-compose.yaml文件中:
version: '3.8' services: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped ports: - '3000:3000' volumes: - grafana-storage:/var/lib/grafana volumes: grafana-storage: {}
保存文件并运行以下命令可编译运行容器:
docker compose up -d
4.2.2 使用绑定挂载
创建要挂载数据的目录,在本例中为当前工作目录中的/data
:
mkdir $PWD/data
对应的docker-compose.yaml
如:
version: '3.8' services: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped user: '0' ports: - '3000:3000' volumes: - '$PWD/data:/var/lib/grafana'
在为Grafana容器设置持久化存储时,我们介绍了两种方法,使用Docker卷、使用绑定挂载。
从配置的角度来看,使用Docker卷需要在docker-compose.yaml文件中的volumes部分定义一个命名卷(如grafana-storage),并将其挂载到容器内的特定路径(如/var/lib/grafana)。Docker会自动创建并管理这个命名卷。
而使用绑定挂载时,我们需要在docker-compose.yaml文件中直接将主机的目录路径(如$PWD/data)挂载到容器内的特定路径(如/var/lib/grafana),并且需要提前在主机上创建这个目录。
从数据管理的角度来看,使用Docker卷时,数据由Docker管理,存储在Docker主机的文件系统中,但与主机的文件系统分离。用户不需要关心数据的具体存储位置,Docker会自动管理数据的创建、存储和删除。
而使用绑定挂载时,数据存储在用户指定的主机目录中,用户需要自行管理这个目录的创建、权限设置等,对数据的存储位置有完全的控制权。
另外,从跨主机迁移的角度来看,使用Docker卷迁移数据需要将Docker卷从一个主机复制到另一个主机,或者使用分布式存储系统。而使用绑定挂载迁移数据只需要将主机上的目录复制到另一个主机的相同位置即可。
5. 构建你自己的Grafana镜像
在某些情况下,你可能需要构建自己的Grafana Docker镜像。例如,你可能想要使用不同的基础镜像,更改日志记录级别,在云上定义秘密,或配置插件。本节将介绍如何构建自定义的Grafana Docker镜像。
5.1 Alpine Linux发行版
Grafana官方提供的Docker镜像有两种变体:Alpine和Ubuntu。默认情况下,这些镜像是使用广泛使用的Alpine Linux项目基础镜像构建的。
Alpine Linux是一个独立的、非商业的通用Linux发行版,专为追求安全性、简单性和资源效率的用户而设计。与其他发行版的基础镜像相比,Alpine要小得多,从而可以创建更精简、更安全的镜像。
如果你重视安全性并希望最小化镜像的大小,建议使用Alpine变体。然而,重要的是要注意,Alpine变体使用musl libc而不是glibc和其他库。因此,某些软件可能会因其libc需求而遇到问题。尽管如此,大多数软件应该不会遇到任何问题,因此Alpine变体通常是可靠的。
目前市面上很多官方镜像都是基于Alpine,而不是Ubuntu、CentOS、等流行的发行版本的,主要也是因为Alpine镜像更小。
5.2 示例:构建预装zabbix插件的自定义Grafana镜像
在Grafana GitHub仓库中,packaging/docker/custom/目录包含一个Dockerfile(考虑到一些读者github内地访问可能受阻,这部分内容请参考附录1),你可以使用它来构建自定义的Grafana镜像。Dockerfile接受GRAFANA_VERSION、GF_INSTALL_PLUGINS和GF_INSTALL_IMAGE_RENDERER_PLUGIN作为构建参数。
以下示例演示了如何构建和运行预装zabbix插件的自定义Grafana Docker镜像。
# 进入custom目录 cd packaging/docker/custom # 运行构建命令,指定Grafana版本和要安装的zabbix插件 docker build \ --build-arg "GRAFANA_VERSION=latest" \ --build-arg "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app" \ -t grafana-custom-zabbix . # 使用docker run命令运行自定义Grafana容器 docker run -d -p 3000:3000 --name=grafana grafana-custom-zabbix
这个自定义镜像基于最新的官方Grafana Docker镜像,并在构建时预装了zabbix插件。通过这种方式,当你运行该自定义镜像时,Grafana将在启动时自动加载zabbix插件,无需再手动安装。
运维系列.在Docker中使用Grafana(二):https://developer.aliyun.com/article/1580941