InfluxData Docker on ARM
作者:Jonathan Sternberg / 产品,用例,开发者,公司
2017年9月26日
导航至
最初,Docker只支持amd64,并且只能在Linux上运行。后来,Docker开始支持不同的架构,如Windows 64位和ARM。您可以在这些平台上运行Docker,但镜像支持仍在进行中。长期以来,一些镜像会创建一个支持armhf的分支,但您将需要为armhf架构创建单独的标签。由于Docker的默认行为是拉取latest
标签,因此运行类似docker pull ubuntu
的命令不会拉取正确的架构。
Docker最近为注册表创建了一个新的manifest格式,允许不同架构的多个镜像共享相同的标签。我们的用户之一@longquan在我们提供的Docker镜像上提出了一个请求,提供了一种方法,可以使用单个Dockerfile构建多个架构。我们采纳了这个请求,并在@jcberthon的帮助下,合并了对ARMv7 32位和ARMv8 64位的支持。
这意味着InfluxData堆栈可以在树莓派等平台上直接使用Docker运行。如果您想在家中低成本、易设置的电脑上进行监控,这再合适不过了!在本篇文章中,我们将要在自己的笔记本电脑上运行InfluxDB,并配置一个Telegraf实例,通过本地网络向笔记本电脑报告。
所需物品
- 树莓派
- 一台电脑(例如笔记本电脑)
- 一台路由器,两台电脑都连接到同一台路由器
- 互联网连接
在笔记本电脑上安装Docker
使用Docker文档中适当的安装方法在您的笔记本电脑上安装Docker。我使用的是Mac OS X,因此我使用docker-machine
作为虚拟机。
一旦您在电脑上安装了Docker,可以通过使用ping
来验证它是否正常工作,然后拉取InfluxDB镜像。
$ docker ping
$ docker pull influxdb
现在,我们可以通过几个简单的命令在笔记本电脑上运行InfluxDB和Chronograf。
# Create a shared network for influxdb and chronograf to communicate over.
$ docker network create influxdb
# Launch the influxdb image.
$ docker run -d --name=influxdb --net=influxdb -p 8086:8086 influxdb
# Launch the chronograf image.
$ docker run -d --name=chronograf --net=influxdb -p 8888:8888 chronograf --influxdb-url http://influxdb:8086
我们为influxdb和chronograf创建一个共享网络,以便它们可以在此网络上通信。虽然看起来很复杂,但这简化了两台容器之间的网络设置。然后,我们使用此网络启动每个镜像,并公开需要公开给外界的端口。对于InfluxDB,这是端口8086。对于Chronograf,这是8888。现在,尝试使用您的电脑的网页浏览器访问Chronograf。如果您在电脑上直接运行Docker,这应该像访问https://127.0.0.1:8888一样简单。如果您使用的是docker-machine
(例如在Mac OS X上),您可以使用我为此演示创建的https://github.com/jsternberg/docker-machine-proxy。它将从Docker Machine代理端口到localhost,以便计算机之间的网络连接能正常工作。
当一切正常,并且您可以在localhost访问Chronograf时,您应该看到Chronograf仪表板,Chronograf应显示没有找到主机。
在我们添加主机之前,还有一件事要做。
获取IP地址
获取路由器为您的电脑分配的IP地址。如果您使用Linux或Mac OS X,可以使用ifconfig
。以下是我的输出示例
> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ac:bc:32:cd:96:f3
inet6 fe80::1c:121a:e9d5:fe98%en0 prefixlen 64 secured scopeid 0x4
inet6 2605:6000:1522:c065:854:a83:ba74:7e05 prefixlen 64 autoconf secured
inet6 2605:6000:1522:c065:9c91:edf6:d09a:e266 prefixlen 64 autoconf temporary
inet 192.168.1.113 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
options=60<TSO4,TSO6>
ether 6a:00:01:52:70:20
media: autoselect <full-duplex>
status: active
en0
接口看起来是唯一一个有IP地址的接口,所以我们将使用192.168.1.113
作为此示例。对于您自己的电脑,您需要使用自己的IP地址!我正在Mac OS X上运行此命令,因此如果您使用的是其他操作系统,接口名称可能不同。在Windows电脑上,您可以使用cmd.exe
和ipconfig
来查找您的本地IP地址。
记住,您想要的是路由器分配给电脑的IP地址,而不是直接指向互联网的公共IP地址。大多数家庭网络的网络地址以192.168.*.*
开始,但有些也可能以10.*.*.*
或172.*.*.*
开始。
启动树莓派
将树莓派连接到您的路由器。如果您从未安装过操作系统,我建议使用Raspbian。它易于安装和使用,这也是我在这篇文章中使用的一个。
然后,您可以运行以下命令来安装Docker。首先,下载Docker提供的简化安装的脚本。
$ curl https://get.docker.com > get-docker.sh
$ sudo bash get-docker.sh
此命令完成后,您将在输出中看到如下信息
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker pi
Remember that you will have to log out and back in for this to take effect!
将会有更多警告。如果您打算在生产环境中使用它,并且安全性是您必须考虑的事项,最好跳过此步骤。对于我们来说,我们将输入上述命令,这样我们就不必在docker
命令前输入sudo
。运行上述命令,然后重新启动Raspberry Pi。
Raspberry Pi重新启动并运行后,再次打开终端并运行以下命令
$ docker run --rm telegraf telegraf config > telegraf.conf
您刚刚在Raspberry Pi上第一次运行了Telegraf!但我们还没有完成。我们生成了一个配置文件。打开telegraf.conf
并转到[[outputs.influxdb]]
部分。它应该看起来像这样
[[outputs.influxdb]]
## The HTTP or UDP URL for your InfluxDB instance. Each item should be
## of the form:
## scheme "://" host [ ":" port]
##
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://127.0.0.1:8089"] # UDP endpoint example
urls = ["https://127.0.0.1:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
修改urls
选项,使其看起来像这样,但用我们之前找到的自己的IP地址替换
[[outputs.influxdb]]
## The HTTP or UDP URL for your InfluxDB instance. Each item should be
## of the form:
## scheme "://" host [ ":" port]
##
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://127.0.0.1:8089"] # UDP endpoint example
urls = ["http://192.168.1.13:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
现在我们需要使用我们的自定义配置文件执行Telegraf。
$ docker run -d --name=telegraf -v $PWD/telegraf.conf:/etc/telegraf/telegraf.conf:ro telegraf
现在稍等片刻。如果您想检查Telegraf是否正常工作,可以使用docker logs -f telegraf
来跟踪日志消息。您可能需要刷新Chronograf页面。如果一切顺利,您应该看到Raspberry Pi和来自Raspberry Pi容器上的指标数据!
虽然这个演示展示了如何在Raspberry Pi上使用Telegraf,但InfluxData的所有产品现在都支持在ARM上使用Docker运行。
帮助和注意事项
对于那些使用不带原生浮点支持的旧ARM架构的用户,docker pull
将无法工作。这是因为Docker中的多架构支持仍在进行中。当从ARM 32位(armhf
)拉取时,可能会拉取带有模拟浮点支持构建的版本(armel
)。由于这个限制,Dockerfile支持在armel
上构建,但我们不会将这些镜像上传到官方仓库。如果您需要使用Docker镜像并且架构为armel
,可以从源代码构建镜像这里。
要确定您的架构,可以运行dpkg --print-architecture
。如果您看到armhf
,那么就是已上传的版本,我们支持。如果您看到armel
,那么您需要从源代码构建。
对于需要帮助的用户,请访问我们的https://community.influxdata.com网站。如果您认为镜像中存在问题,请在该仓库中提交错误报告。