Skip to content

快速参考

支持的标签及相应的 Dockerfile 链接

快速参考(续)

什么是 EMQX

EMQX 是世界上最具扩展性的开源 MQTT 代理,具有高性能,可在 1 个集群中连接 1 亿多物联网设备,同时保持每秒 100 万条消息的吞吐量和亚毫秒级延迟。

EMQX 支持多种开放标准协议,如 MQTT、HTTP、QUIC 和 WebSocket。它 100%符合 MQTT 5.0 和 3.x 标准,并通过 TLS/SSL 和各种认证机制确保与 MQTT 的双向通信安全。

凭借内置强大的基于 SQL 的规则引擎,EMQX 能够实时提取、过滤、丰富和转换物联网数据。此外,它通过无主分布式架构确保高可用性和水平可扩展性,并提供对运维友好的用户体验和出色的可观测性。

EMQX 在 50 多个国家和地区拥有超过 20K+企业用户,连接全球 1 亿多物联网设备,并在物联网、工业物联网、车联网等关键任务场景中获得 400 多个客户的信任,包括惠普、VMware、惠尔丰、上汽大众、爱立信等 70 多家财富 500 强公司。

logo

如何使用此图像

运行 EMQX

在这个 Docker 镜像下执行一些命令

$ docker run -d --name emqx emqx:${tag}

例如

$ docker run -d --name emqx -p 18083:18083 -p 1883:1883 emqx:latest

EMQX 代理在 Docker 容器中以 Linux 用户 emqx 运行。

配置

所有在 etc/emqx.conf 中的 EMQX 配置都可以通过环境变量进行配置。

示例:

EMQX_DASHBOARD__DEFAULT_PASSWORD       <--> dashboard.default_password
EMQX_NODE__COOKIE                      <--> node.cookie
EMQX_LISTENERS__SSL__default__ENABLE   <--> listeners.ssl.default.enable

注意:“default”的小写使用并非拼写错误。它用于表明小写环境变量是等效的。

  • 前缀 EMQX_ 被移除
  • 所有大写字母都被替换为小写字母
  • __ 被替换为 .

例如,将 MQTT TCP 端口设置为 1883

$ docker run -d --name emqx -e EMQX_DASHBOARD__DEFAULT_PASSWORD=mysecret -p 18083:18083 -p 1883:1883 emqx:latest

请在官方文档中阅读更多关于 EMQX 配置的内容

EMQX 节点名称配置

环境变量 EMQX_NODE__NAME 允许你指定一个 EMQX 节点名称,其默认值为 <container_name>@<container_ip>

如果未指定,EMQX 将根据运行环境或用于节点发现的其他环境变量来确定其节点名称。

集群

EMQX 支持多种集群方法,详情请参阅我们的文档。

让我们从 docker-compose 创建一个静态节点列表集群。

  • 创建 docker-compose.yaml :

    version: '3'

    services: emqx1: image: emqx:latest environment: - "EMQX_NODE__NAME=emqx@node1.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]" networks: emqx-bridge: aliases: - node1.emqx.io

    emqx2:
      image: emqx:latest
      environment:
      - "EMQX_NODE__NAME=emqx@node2.emqx.io"
      - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
      - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
      networks:
        emqx-bridge:
          aliases:
          - node2.emqx.io
    

    networks: emqx-bridge: driver: bridge

  • 启动 docker-compose 集群

    docker-compose -p my_emqx up -d

  • 查看集群

    $ docker exec -it my_emqx_emqx1_1 sh -c "emqx ctl cluster status" Cluster status: #{running_nodes => ['emqx@node1.emqx.io','emqx@node2.emqx.io'], stopped_nodes => []}

持久性

如果你想持久化 EMQX 容器,你需要保留以下目录:

  • /opt/emqx/data
  • /opt/emqx/log

由于这些文件夹中的数据部分存储在 /opt/emqx/data/mnesia/${node_name} 下,用户还需要重用相同的节点名称才能看到以前的状态。要实现此功能,需要将 EMQX_NODE__NAME 的主机部分设置为静态的东西,在重新启动或重新创建容器时不会更改。如果你只有一个节点,它可以是容器名称、主机名或环回 IP 地址 127.0.0.1

如果你使用 docker-compose,配置看起来会是这样:

volumes:
  vol-emqx-data:
    name: foo-emqx-data
  vol-emqx-log:
    name: foo-emqx-log

services:
  emqx:
    image: emqx:latest
    restart: always
    environment:
      EMQX_NODE__NAME: foo_emqx@127.0.0.1
    volumes:
      - vol-emqx-data:/opt/emqx/data
      - vol-emqx-log:/opt/emqx/log

内核调优

在 Linux 主机下,最简单的方法是调优指南。

如果你想通过 Docker 调优 Linux 内核,你必须确保你的 Docker 是最新版本(>=1.12)。

docker run -d --name emqx -p 18083:18083 -p 1883:1883 \
    --sysctl fs.file-max=2097152 \
    --sysctl fs.nr_open=2097152 \
    --sysctl net.core.somaxconn=32768 \
    --sysctl net.ipv4.tcp_max_syn_backlog=16384 \
    --sysctl net.core.netdev_max_backlog=16384 \
    --sysctl net.ipv4.ip_local_port_range=1000 65535 \
    --sysctl net.core.rmem_default=262144 \
    --sysctl net.core.wmem_default=262144 \
    --sysctl net.core.rmem_max=16777216 \
    --sysctl net.core.wmem_max=16777216 \
    --sysctl net.core.optmem_max=16777216 \
    --sysctl net.ipv4.tcp_rmem=1024 4096 16777216 \
    --sysctl net.ipv4.tcp_wmem=1024 4096 16777216 \
    --sysctl net.ipv4.tcp_max_tw_buckets=1048576 \
    --sysctl net.ipv4.tcp_fin_timeout=15 \
    emqx:latest

记住:不要以特权模式运行 EMQX DOCKER 或在容器中挂载系统进程来调整 Linux 内核,这是不安全的。

许可证

查看此映像中包含的软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 emqx/ 目录中找到。

对于任何预构建镜像的使用,镜像用户有责任确保对此镜像的任何使用都符合其中包含的所有软件的任何相关许可证。